在哪里使用并初始化UIManagedDocument

时间:2014-11-17 14:32:35

标签: iphone ios8 cs193p

我是IOS的新手,我正在关注CS193p斯坦福大学的讲座以了解核心数据,在演示中教授使用的类别与我们在创建应用程序时检查核心数据应用程序复选框时的实际情况类似它将核心数据放在appDelegate中。这是教授在演示中所做的,他在AppDelegate中创建了managedObjectContext,并使用Notification将Context传递给控制器​​。现在对于Assignment,他要求使用UIManagedDocument,但我对它放在哪里感到困惑。我应该在View Controller或AppDelegate中声明它并使用Notification Center传递上下文。所以我只想知道哪个更适合UIManagedDocument。小号

2 个答案:

答案 0 :(得分:1)

我找到的最佳方法是创建一个新项目(仅作为示例),在询问时选中“使用核心数据”,然后查看AppDelegate。使用它来查看它是如何完成的,并且可能复制适当的部分(当然需要进行一些调整)。但大多数情况下,用它来了解Apple如何推荐使用它。

使用具有managedObjectContext属性的共享实例创建自定义类。

在AppDelegate的application didFinishLaunchingWithOptions中,创建您的sharedInstance并将其传递给'managedObjectContext`。

MyDataManager *dataManager = [MyDataManager sharedInstance];
dataManager.managedObjectContext = self.managedObjectContext;

另请注意,如果您通过点击Xcode中的“停止”来终止应用程序,则不会保存数据(因为它已经完成,因为它应该在AppDelegate即将正确关闭应用程序时)。

确保[self saveContext];中也有applicationDidEnterBackground,它也应该在applicationWillTerminate内。将数据库仅在需要时(而不是在每次更改时)都写入内存是一种很好的做法。在AppDelegate中,它还会在提交之前询问数据是否已更改。

当然,如果您拥有managedObjectContext实例,也可以手动保存。

如果您对数据库进行了更改,则可能需要在再次运行之前从模拟器中删除该应用程序(否则应用程序将崩溃,因为较旧的数据库与新数据库不匹配)。

编辑:我不记得我在哪里阅读它,但教授不使用CoreData作为数据库,只管理数据(图像等)。

答案 1 :(得分:1)

您可以在任何想要启动数据库访问权限的位置初始化UIManagedDocument。当我完成作业(去年)时,我放入了AppDelegate。现在回过头来看,我看到UITabBarController中有两个ViewControllers,它们都需要上下文。所以我使用了像Paul在演讲中所做的NSNotification机制。

他给出了使用UIManagedDocument而不是#34;用户核心数据"复选框(创建项目时)是:

  1. 他解释起来比较简单(UIManagedDocument可以解决很多复杂问题)
  2. UIManagedDocument让您快速使用iCloud
  3. 我也正在审查这个问题。如果你想听保罗的话,他会在第12讲(2013-14秋季)以14分25秒(UIManagedContext)谈论它,并在14:50他开始谈论获得UIManagedContext的两种方式 - 是UIManagedDocument或者使用核心数据"复选框。

    在这里,我们链接到iTunes上的课程:https://itunes.apple.com/us/course/developing-ios-7-apps-for/id733644550