【问题标题】:Accessing managedObjectContext in initWithCoder:在 initWithCoder 中访问 managedObjectContext:
【发布时间】:2013-10-27 19:05:58
【问题描述】:

我正在尝试在 NSManagedObject 子类上实现拖放操作,其中包括使用 Apple 文档 https://developer.apple.com/library/mac/documentation/cocoa/conceptual/coredata/Articles/cdUsingMOs.html#//apple_ref/doc/uid/TP40001803-CJBDBHCB 中“拖放”下的信息。

我有一个名为 Person 的 NSManagedObject 子类,并希望使用它的 managedObjectID(URI 编码)来执行链接操作。文档说明了以下方法从粘贴板上的 URI 编码的 moID 恢复我的 Person 对象:

NSURL *moURL = // get it from the pasteboard ...
NSManagedObjectID *moID = [[managedObjectContext persistentStoreCoordinator]
    managedObjectIDForURIRepresentation:moURL];
// assume moID non-nil...
NSManagedObject *mo = [managedObjectContext objectWithID:moID];

如何访问 managedObjectContext?在我运行这段代码 (initWithCoder:) 时,该值仍然是 nil

【问题讨论】:

    标签: cocoa core-data drag-and-drop nsmanagedobject nsmanagedobjectcontext


    【解决方案1】:

    将您的托管对象上下文视为一个便笺簿。您发布的链接将其解释为:

    仅修改托管对象不会导致将更改保存到存储中。托管对象上下文充当暂存器。您可以使用它创建和注册托管对象,对对象进行更改,以及根据需要撤消和重做更改。如果您对与给定上下文关联的托管对象进行更改,这些更改将保持在该上下文的本地,直到您通过向上下文发送保存来提交更改:消息

    因此,您可以使用在其他地方使用的相同上下文。假设您使用 Apple 核心数据模板在 appDelegate 中创建了一个上下文。此上下文在您的代码中变为 managedObjectContext。你使用mo 对象,最后你save: 上下文或者你做一个rollback

    【讨论】:

    • 感谢您的建议。我的问题的底线是我的应用程序是基于文档的,我不能谈论单一的上下文。所以,我的托管对象(正在初始化)已经需要知道它属于哪个managedObjectContext。嗯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2010-11-27
    • 2012-08-04
    • 2011-01-19
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多