目标c – 核心数据保存方法

我的应用程序中有一些NSManagedObject子类,我试图了解何时以及如何保存更改。
我将尝试解释我自己,例如类ANSManagedObject子类。
在应用生命周期中,我会:

 App launched ... Create an instance of class A ... Change some properties of A instance ... App go to background ... App becomes active again ... Change some more properties of A instance ... App terminates 

我什么时候需要调用[context save:]?
在A实例的每次更改之后都要调用它吗? 或者,也许我只有当应用程序去背景调用它?
我应该在创build或删除任何一个实例之后调用它吗?

一个不错的方法是将UIManagedDocument放在你的AppDelegate中。 然后,只要应用程序发生某些更改(如崩溃),就可以调用[context save]。 我喜欢的顺序是这样的:

  1. 创buildUIManagedDocument对象(在应用程序确实加载或任何地方),并将其分配给一个属性
  2. 设置文件(检查它是否存在于磁盘上或已经打开等等,并作出相应的响应)
  3. 将UIManagedObjectContext传递给应用程序中的初始UIViewController(从那里您可以将上下文传递给其他视图控制器)

UIManaged文档将为您保存上下文。

查看UIManagedDocument文档来configuration持久性存储选项(将选项的NSDictionary发送到您的UIManagedDocument实例,请通过下面的链接查看第一个示例)。

UIManagedDocument文档: http : //developer.apple.com/library/ios/#documentation/UIKit/Reference/UIManagedDocument_Class/Reference/Reference.html

请参阅iTunesU(2011年秋季)上免费提供的iPhone和iPad应用程序开发课程CoreData讲座和演示(讲座13和14),Paul Hegarty免费提供。

在调用保存之前,数据将不会保存到持久性存储中。 所以,这取决于你的应用需要什么。 如果你希望它能够恢复它曾经有过的最后一个值,那么你应该在每次修改后保存。

简单的修改就是在修改后保存。

你可以做一些更奇特的东西,比如只保存一段时间后,这么多的变化被分组在一起…并捕获任何事件,将您的应用程序在后台,然后保存…

但是,这就是UIManagedDocument自动为你做的,所以你可以用它来代替。

根据您所做的更改数量以及每次更改需要保存的数据量,您可以select保存一小部分或很多。 如果你只是保存一个string或一个数字或一个布尔,然后继续调用保存:在你的上下文中,一旦进行更改。

如果数据量很大,则可能需要对更改进行维护,然后将其保存在后台队列中,以便不阻塞主队列。 这样你就不会等到后台去执行你的保存。

蒂姆