Ios 从UIManagedDocument到传统的核心数据堆栈

Ios 从UIManagedDocument到传统的核心数据堆栈,ios,core-data,Ios,Core Data,我使用UIManagedDocument创建了一个新应用程序。虽然在我的设备上一切正常,但我的收视率很差,因为其他设备存在问题:( 经过大量的阅读和测试,我决定回到传统的核心数据栈。 但是,对于已经在应用商店中的应用程序,最好的方法是什么呢? 如何构建此更新?我应该注意什么 谢谢, StefanUIManagedDocument是一种特殊的文档,是一种UIDocument子类,它使用核心数据框架存储其数据。因此,它结合了文档体系结构和核心数据功能的强大功能 您可以从iOS基于文档的应用程序编程指

我使用UIManagedDocument创建了一个新应用程序。虽然在我的设备上一切正常,但我的收视率很差,因为其他设备存在问题:( 经过大量的阅读和测试,我决定回到传统的核心数据栈。 但是,对于已经在应用商店中的应用程序,最好的方法是什么呢? 如何构建此更新?我应该注意什么

谢谢,
Stefan

UIManagedDocument是一种特殊的文档,是一种UIDocument子类,它使用核心数据框架存储其数据。因此,它结合了文档体系结构和核心数据功能的强大功能

您可以从iOS基于文档的应用程序编程指南中了解更多关于基于文档的体系结构的信息,我建议您使用iOS5会话视频在iCloud中存储WWDC2011文档。我还建议您使用斯坦福CS193P:iPad和iPhone应用程序开发(2011年秋季)第13讲

调用saveToURL:forSaveOperation:completionHandler:时创建的内容是UIManagedDocument和UIDocument的实现细节,您不必担心或依赖它。但是,在当前的实现中,正在创建一个包含sqlite数据库文件的文件夹

不可以。所有实体都将包含在一个数据库文件中,通常也称为:持久存储。可以使用多个持久存储,但这些都是更高级的用例,UIManagedDocument当前使用一个

UIManagedDocument的上下文是指来自底层核心数据框架的NSManagedObjectContext。UIManagedDocument实际上并行运行其中两个,以将IO操作剥离到后台线程。说到上下文本身的性质,这里引用《核心数据编程指南》:

您可以将托管对象上下文视为智能便笺簿。当您从持久性存储中获取对象时,您会将临时副本带到便笺簿上,它们在便笺簿上形成一个对象图(或一组对象图)。然后,您可以随意修改这些对象。但是,除非您确实保存了这些更改,否则永久存储将保持不变


但是,看一看我在上面发布的讲座和其他材料,了解所使用的技术及其在不同情况下对开发人员的潜在价值,确实是一个好主意。

UIManagedDocument是一种特殊的文档,是一个UIDocument子类,它使用核心数据框架存储其数据它结合了文档体系结构和核心数据功能的强大功能

您可以从iOS基于文档的应用程序编程指南中了解更多关于基于文档的体系结构的信息,我建议您使用iOS5会话视频在iCloud中存储WWDC2011文档。我还建议您使用斯坦福CS193P:iPad和iPhone应用程序开发(2011年秋季)第13讲

调用saveToURL:forSaveOperation:completionHandler:时创建的内容是UIManagedDocument和UIDocument的实现细节,您不必担心或依赖它。但是,在当前的实现中,正在创建一个包含sqlite数据库文件的文件夹

不可以。所有实体都将包含在一个数据库文件中,通常也称为:持久存储。可以使用多个持久存储,但这些都是更高级的用例,UIManagedDocument当前使用一个

UIManagedDocument的上下文是指来自底层核心数据框架的NSManagedObjectContext。UIManagedDocument实际上并行运行其中两个,以将IO操作剥离到后台线程。说到上下文本身的性质,这里引用《核心数据编程指南》:

您可以将托管对象上下文视为智能便笺簿。当您从持久性存储中获取对象时,您会将临时副本带到便笺簿上,它们在便笺簿上形成一个对象图(或一组对象图)。然后,您可以随意修改这些对象。但是,除非您确实保存了这些更改,否则永久存储将保持不变


但是,看一看我上面发布的讲座和其他材料确实是一个好主意,这样可以大致了解所使用的技术及其在不同情况下对开发人员的潜在价值。

我认为您最好使用UIManagedDocument来确定您的问题并加以解决

然而,如果你想使用普通的MOC,你只需要担心几件事。最大的一件事是UIMD将东西存储在一个文件包中,根据你的选择,你可能需要担心更改日志

最后,如果您想要一个单一的sqlite文件,并且希望减少混淆的可能性,那么您可以使用一个类来打开UIManagedDocument,获取每个对象,然后将其复制到新MOC的单一sqlite文件中

现在,您不应该需要不同的对象模型,因此您不应该有任何迁移问题

然后,只需删除保存UIManagedDocument的文件包,并仅使用单个文件sqlite存储

基本上,在启动时,您尝试打开UIManagedDocument。如果它打开,请加载每个对象并将其复制到新数据库中。然后删除它

从那时起,你就可以出发了

但是,请注意,您现在可能会遇到一些UI延迟,因为所有数据库IO都发生在主UI线程上。要解决此问题,您可能需要使用单独的MOC,并通过正常的COreData通知机制协调更改。这方面有大量的文档、示例和教程

编辑

谢谢你的回答。我在这些问题上的问题是,我不是 能够复制。我所有的设备都工作正常。但我得到了一个 大量邮件,关于以下问题:-重复条目-无数据 在停止并重新启动应用程序后-有人说