【问题标题】:With CoreData, how can I determine if an NSManagedObject is in a specific context?使用 CoreData,我如何确定 NSManagedObject 是否在特定上下文中?
【发布时间】:2014-10-26 06:35:02
【问题描述】:

在核心数据中,您只能通过从中获取对象的上下文来操作对象。这意味着,如果你有两个上下文,我们称它们为 mainContext 和 backGround 上下文,backGround 上下文必须只更新来自 backgroundContext 的对象,而 mainContext 必须只更新来自 mainContext 的对象。这听起来很简单。

这是我的问题。我有一个来自未知上下文的对象,如何确定该对象是来自 mainContext 还是 backgroundContext?我知道 managedObject 有一个指向它的 managedObjectContext 的指针,称为“managedObjectContext”,但我不知道如何将它与指向 mainContext 和 backgroundContext 的指针进行比较以查看它在哪一个?请帮忙。

【问题讨论】:

  • [myObject.managedObjectContext isEqual:mainObjectContext]?我应该补充一点,如果你想要指针比较而不是对象相等,我相信你想要 ==

标签: ios core-data nsmanagedobject nsmanagedobjectcontext


【解决方案1】:

你有的地方:

id yourMainContext = ...
id yourBGContext = ...

现在检查上下文:

id yourObjectsContext = yourObject.managedObjectContext;
BOOL equalToMain = [yourObjectsContext isEqual:yourMainContext];
BOOL equalToBG = [yourObjectsContext isEqual:yourBGContext];

完整解决方案

要存储 mainQueue/BGQueue 的上下文,您还可以使用函数 dispatch_queue_set_specific

你有的地方:

id yourMainContext = ...
dispatch_queue_set_specific(dispatch_get_main_queue(), "MOC", yourMainContext);

还有其他地方

id yourBGContext = ...
dispatch_queue_set_specific(theBGQueue, "MOC", yourBGContext);

现在稍后检查上下文:

id queueContext = dispatch_get_specific("MOC");
assert(queueContext);

id yourObjectsContext = yourObject.managedObjectContext;
BOOL equalToQueue = [yourObjectsContext isEqual:queueContext];
//SAFE TO MODIFY    

【讨论】:

    【解决方案2】:

    现在在 IOS8 NSManagedObjectContext 中有一个属性名称,您可以使用它并进行比较:

    [yourObjectsContext.name isEqualToString:yourBGContext.name]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多