gpt4 book ai didi

ios - 使用 NSPersistentStoreCoordinator 的要点?

转载 作者:技术小花猫 更新时间:2023-10-29 10:21:20 25 4
gpt4 key购买 nike

来自 Stanford 193P 的核心数据讲座iTunes 上的 iPhone 类(class),讲师在不使用 NSPersistentStoreCoordinator 的情况下使用 Core Data 编写了一个示例项目,并使用 NSManagedObjectModel 加载它。但是在查看其他代码示例和有关 iPhone 开发的 Big Nerd Ranch 书籍时,他们正在创建 NSManagedObjectModel 和 PersistentStoreCoordinator 并以这种方式设置 NSManagedObjectContext

我的问题是这样做的目的是什么,这两种方法的优缺点是什么?

最佳答案

我非常密切地关注同一个讲座系列。这个特定的示例从 Flickr 中提取数据(摄影师和照片)并将它们加载到 CoreData 中。在此应用程序中实际上没有必要使用 CoreData,因为它需要在每次应用程序加载时从 flickr 获取新数据,因此持久保存没有意义。教授只是使用之前演示中的 flickr 抓取应用程序作为起点,因为学生已经熟悉它(让他专注于解释 CoreData)。然而,正如 rickster 所提到的,在不将上下文保存到磁盘的情况下使用核心数据有巨大的好处。

正如 Paul 在演示之前的讲座中所解释的那样,核心数据库可以通过以下方式创建(在 iOS5 中):

  1. 在创建新项目时点击应用模板的“使用核心数据”。
  2. 使用 UIManagedDocument

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

使用 UIManagedDocument 非常相似,除了您的 AppDelegate 是独立的。您使用应用程序文档目录中的 URL 路径创建一个 UIManagedDocument(可能在您的初始 View Controller 中)(注意:您必须手动检查文件是否已经存在、存在但未打开或不存在)。然后你可以像上面一样使用这个文档的上下文。

另一个注意事项:在您的 AppDelegate 中创建一个指向您的上下文的指针是个好主意,这样您就可以在应用程序崩溃或终止时明确保存您的上下文(仅当它准备好时!)。

持久存储协调器是自动为您设置的,您可以使用它的 persistentStoreOptions 属性配置它(实际上您需要这样做才能持久保存上下文),或者通过子类化 UIManagedDocument 并覆盖所需的方法。

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

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

如果您在未选中核心数据选项的情况下启动您的应用程序并希望将其添加到 AppDelegate,只需创建一个选中核心数据的新项目并将所有代码复制到您的 AppDelegate(应该只是 3 个属性及其访问器以及访问文档目录的便捷方法)。您需要指向您的初始 View Controller 、模型等。

更新:只是想增加另一个便利。如果您的托管对象上下文存储在您的 appDelegate 中,您只需使用

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

这不需要传递它。

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

关于ios - 使用 NSPersistentStoreCoordinator 的要点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com