gpt4 book ai didi

ios - 如何从特定对象 ID 获取核心数据对象?

转载 作者:IT王子 更新时间:2023-10-29 07:28:21 26 4
gpt4 key购买 nike

我可以使用以下代码轻松获取 Core Data 中对象的 ID:

NSManagedObjectID *moID = [managedObject objectID];

但是,有没有办法通过给对象一个特定的对象 ID 来从核心数据存储中取出对象?我知道我可以通过使用 NSFetchRequest 来做到这一点,就像这样:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(objectID = %@)", myObjectID];
[fetchRequest setPredicate:predicate];

但是,我想以一种不启动它自己的获取请求的方式来做这件事。有什么想法吗?

最佳答案

你想要:

-(NSManagedObject *)existingObjectWithID:(NSManagedObjectID *)objectID
error:(NSError **)error

从存储中获取具有该 ID 的对象,如果不存在则为 nil。

(请注意:NSManagedObjectContext 上有两个方法,它们的名称看起来很相似,这让我很困惑。为了帮助他们保持直觉,下面是另外两个方法的作用:

-(NSManagedObject *)objectWithID:(NSManagedObjectID *)objectID

...将使用提供的 objectID 创建一个错误对象,无论是否这样的对象实际存在于商店中。如果它不存在,除非您首先使用 NSManagedObjectContext 的 insertObject: 插入该对象,否则任何引发错误的操作都将失败。我发现的唯一用途是将对象从一个商店复制到另一个商店,同时保留 ObjectID。

-(NSManagedObject *)objectRegisteredForID:(NSManagedObjectID *)objectID

...将返回具有该 ID 的对象,如果它已被此 managedObjectContext 从存储中获取。如果有人知道此方法有什么用,请发表评论。)

[eta.: 第一种方法与其他两种方法的另一个重要区别是 existingObjectWithID:error: 从不返回错误;它总是为您获取整个对象。如果你想避免这种情况(例如,使用具有大 blob 属性的昂贵的获取对象),你必须巧妙地使用 objectWithID:objectRegisteredForID:,不会引发故障;或使用正确配置的获取请求。]

关于ios - 如何从特定对象 ID 获取核心数据对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5035057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com