ios – 使用NSPersistentStoreCoordinator的点?

前端之家收集整理的这篇文章主要介绍了ios – 使用NSPersistentStoreCoordinator的点?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在iTunes的 Stanford 193P iPhone课程的Core Data演讲中,教练用Core Data编写了一个示例项目,而不使用NSPersistentStoreCoordinator并将其加载到NSManagedObjectModel中.但是,在其他代码示例和Big Nerd Ranch的iPhone开发书上,他们正在创建一个NSManagedObjectModel和PersistentStoreCoordinator,并以这种方式设置NSManagedObjectContext.

我的问题是这样做的目的是什么,这两种方法的利弊是什么?

解决方法

我非常密切地跟着同一个讲座系列.这个特定的例子从Flickr中提取数据(摄影师和照片),并将它们加载到CoreData中.在这个应用程序中使用CoreData并不是真的有必要,因为它需要在每个应用程序加载时从flickr获取新数据,所以没有必要保存.由于学生已经熟悉了该教程,所以该教授只是使用前面演示中的flickr提取应用程序作为起点(允许他专注于解释CoreData).然而,正如里克斯提到的那样,使用核心数据而不会将上下文保存到磁盘中有很大的好处.

正如保罗在演示之前的讲座中所说,可以通过以下方式创建一个核心数据库(在iOS5中):

>在创建新项目时,单击“使用核心数据”作为应用程序模板.
>使用UIManagedDocument

第一种方法背后的想法是,Xcode将在AppDelegate中放置一堆代码来设置您的文档目录/持久存储协调器和模型.然后,它将会将托管对象CONTEXT传递给您的初始视图控制器(它应该在公共API中具有一个NSManagedObjectContext属性),并且在那里您可以像一瓶啤酒一样传递上下文,当您切换到其他视图控制器时.传递环境是访问核心数据库的正确过程.

使用UIManagedDocument是非常相似的,除了你的AppDelegate被遗弃.您可以使用应用程序文档目录中的URL路径创建一个UIManagedDocument(也许在您的初始视图控制器中)(注意:您必须手动检查文件是否已经退出,存在但不是打开或不存在).那么你可以用与上述相同的方式使用这个文档的上下文.

另外一个注意事项:在AppDelegate中创建一个指向你上下文的指针是一个好主意,所以你可以明确地保存你的上下文(只有当它已经准备就绪了),当应用崩溃或终止时.

持久性存储协调器为您自动设置,您可以使用它的persistentStoreOptions属性(并且确实需要为了持久保存上下文)或通过对UIManagedDocument进行子类化并覆盖所需的方法来配置它.

阅读UIManagedDocument文档中的概述
http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIManagedDocument_Class/Reference/Reference.html

这两种方法的工作方式相同,并为您提供相同的控制和访问.使用UIManagedDocuments可以在多个sqlite文件中创建多个数据库,您也可以等到创建/设置数据库,直到需要. “使用核心数据”选项为您提供了在应用程序加载时设置的单个核心数据库,允许您将CoreData的内容集中在AppDelegate周围,节省编码时间,并且适用于快速应用程序.我喜欢UIManagedDocument.

如果您启动了您的应用程序而未选中核心数据选项,并希望将其添加到AppDelegate,只需创建一个核心数据检查的新项目,并将所有代码复制到AppDelegate(应该只有3个属性及其访问器以及一个方便访问文件目录的方法).您将需要指向您的初始视图控制器,型号等.

更新:
只是想增加一个方便.如果您的托管对象上下文存储在您的AppDelegate中,您可以通过使用应用程序的任何位置访问它

NSManagedObjectContext* context = [[(AppDelegate*) [UIApplication sharedApplication] delegate] myManagedObjectContext];

这不必传递它.

对于任何CoreData应用程序,如果您对模型进行了任何更改,请确保在再次构建之前手动删除模拟器中的应用程序.否则,您将在下一次构建中收到错误,因为它将使用旧文件.

猜你在找的iOS相关文章