0

我的应用程序中有一些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 实例的每次更改后调用它?或者也许我只在应用程序进入后台时才调用它?
我应该在创建或删除任何 A 实例后调用它吗?

4

3 回答 3

1

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

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

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

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

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

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

于 2012-06-04T20:17:11.883 回答
1

根据您所做的更改量以及每次更改需要保存的数据量,您可以选择保存少量或大量。如果您只是保存一个字符串、一个数字或一个布尔值,那么请在进行更改后立即在您的上下文中调用 save:。

如果数据很多,您可能需要合并您的更改,然后将其保存在后台队列中,这样您就不会阻塞主队列。这样您就不必等待去后台执行保存。

蒂姆

于 2012-06-04T20:21:21.880 回答
1

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

简单的更改是在进行修改后保存。

您可以做一些更花哨的事情,例如仅在一定时间后保存,将许多更改组合在一起...并捕获任何将您的应用程序置于后台的事件,然后保存...

但是,这就是 UIManagedDocument 自动为您所做的,因此您可以直接使用它。

于 2012-06-04T20:03:48.333 回答