【问题标题】:How to check existence of reference to an NSManagedObject?如何检查对 NSManagedObject 的引用是否存在?
【发布时间】:2023-03-28 03:53:01
【问题描述】:

我使用本网站http://cocoawithlove.com/2008/08/safely-fetching-nsmanagedobject-by-uri.html中的示例成功存储和检索了对 NSManagedObject 的引用

问题是,应用程序在尝试检索已删除的 NSManagedObject 时崩溃。

我在对象上尝试了 isFault 方法,但它总是返回 no,即使对象存在。

这是我用来检索它的代码:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSData *myData = [prefs objectForKey:@"activatedObject"];
if (myData)
{
    NSURL *myURL = [NSKeyedUnarchiver unarchiveObjectWithData:myData];
    NSManagedObjectID *myID = [self.persistentStoreCoordinator managedObjectIDForURIRepresentation:myURL];
    id myObject = [self.managedObjectContext objectWithID:myID];
    self.Object = myObject;
} 

【问题讨论】:

    标签: iphone core-data reference nsuserdefaults nsmanagedobject


    【解决方案1】:

    你可以试试调用这个方法:

    NSError *error = nil;
    id myObject = [self.managedObjectContext existingObjectWithID:myID error:&error];
    

    如果 myID 指定的对象无法获取,或不存在,或无法出错,则返回 nil。

    【讨论】:

      【解决方案2】:

      文档提到在获取 objectID 之前必须将对象保存到存储中。你在保存商店之前得到它吗?

      另外,只需考虑保存对象的唯一属性的值,然后执行搜索即可。

      【讨论】:

      • 是的,已保存。我在应用程序午餐后检索它。设置一个唯一属性然后搜索它会很复杂......但如果有任何其他解决方案,我会尝试。
      • 只是稍微复杂一点。您不必创建独特的属性。希望每个实体都有一个独特的属性。根据“名称”属性创建获取请求非常简单。
      猜你喜欢
      • 2012-01-14
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 2013-03-21
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多