使用 CoreData,我如何确定 NSManagedObject 是不是在特定上下文中?
Posted
技术标签:
【中文标题】使用 CoreData,我如何确定 NSManagedObject 是不是在特定上下文中?【英文标题】: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]?我应该补充一点,如果你想要指针比较而不是对象相等,我相信你想要 == 【参考方案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]
【讨论】:
以上是关于使用 CoreData,我如何确定 NSManagedObject 是不是在特定上下文中?的主要内容,如果未能解决你的问题,请参考以下文章
如何让 SwiftUI 与 Core Data 一起工作(在启动项目后)?