我想知道以下如何在Objective-C
中起作用在我的头文件中,我有以下内容从不同的视图控制器初始化
@interface UserLookup : UIViewController {
NSManagedObjectContext *referringObject;
}
并且在我的实现文件中,我必须将此NSManagedObjectContext
传递给2个子视图控制器,然后它会改变哪个视图控制器首先被调用...并且任何一个中的NSManagedObjectContext
都会发生变化儿童控制器?
此致
答案 0 :(得分:1)
你真的不需要将它传递给你需要核心数据访问的每个视图控制器 - 只需使用
NSManagedObjectContext* moc = [(MyAppDelegateClass *)[[UIApplication sharedApplication] delegate] managedObjectContext];
managedObjectContext
必须是您的应用代表的可访问的ivar。
它在概念上也是相似的。有一个NSManagedObjectContext(在大多数不复杂的应用程序中,您认为可以有多个),由您的应用程序委托拥有。您不会保留或释放它(除非在应用程序代理中创建它,在首次访问时使用Apple的模板代码,以及在app delegate的dealloc
中发布时。
答案 1 :(得分:0)
ASFAIK首先使用viewController不应该有所区别。将NSManagedObjectContext视为指向物理数据源的指针。
您可以从上下文中添加和删除NSManagedObjects。但是,当您调用save:
方法时,这些更改只会保存到磁盘。
这有帮助吗?
答案 2 :(得分:0)
只使用一个上下文很简单,工作正常。但您也可以创建新的托管对象上下文并将其传递给其他视图控制器。虽然持久性存储只有一个,但您可以有多个上下文。
每个上下文都有每个撤消管理器,因此您可以控制上下文中托管对象的更改。即使其他上下文也有一些更改,您也可以仅在一个上下文中保存更改。保存上下文后,可以通过以下NSManagedObjectContext实例方法合并两个上下文的更改:
- (void)mergeChangesFromContextDidSaveNotification:(NSNotification *)notification
- (void)refreshObject:(NSManagedObject *)object mergeChanges:(BOOL)flag
也许这份文件可以帮助您了解更多细节。 http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/stack.html
CoreDataBooks Apple示例代码使用附加上下文。