核心数据 - 基本问题

时间:2010-09-09 22:25:54

标签: iphone objective-c core-data

我想知道以下如何在Objective-C

中起作用
  1. 在我的头文件中,我有以下内容从不同的视图控制器初始化

    @interface UserLookup : UIViewController {
        NSManagedObjectContext *referringObject;
    }
    
  2. 并且在我的实现文件中,我必须将此NSManagedObjectContext传递给2个子视图控制器,然后它会改变哪个视图控制器首先被调用...并且任何一个中的NSManagedObjectContext都会发生变化儿童控制器?

    此致

3 个答案:

答案 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示例代码使用附加上下文。