我是 Today 扩展的新手,使用的是嵌入式框架。
我们的应用目前使用由 sqlite 支持的核心数据。如果我想在应用程序和今天的扩展之间共享它,我应该将它移动到一个框架以供两者共享吗?
如何迁移应用商店中的当前版本以便能够升级到新结构?
最佳答案
您需要确保模型和持久存储文件对应用和扩展都可用。
对于模型,将其移动到框架是一个好主意,因为这意味着模型文件只有一个副本。只要应用程序和扩展都链接到框架,它们就可以使用。如果这样做,将设置核心数据堆栈的代码也放入框架中可能是个好主意,因为在这两种情况下它都是相同的。
您当然可以只在两个目标中包含模型。这意味着您将拥有该文件的两个副本,这会浪费空间。不过可能空间不大。
对于持久存储,您必须设置应用组并使用组目录中的存储文件。应用组是应用和扩展的“功能”中的一项设置——打开它并创建一个组名。然后将持久存储文件放在组目录中,您可以使用如下代码找到该目录
NSURL *groupURL = [[NSFileManager defaultManager]
containerURLForSecurityApplicationGroupIdentifier:
@"GROUP NAME HERE"];
[我更详细地介绍了其中的一些内容 at my blog ].
如果您有现有数据,则必须将其移动到新的商店文件中。这看起来像
- 检查数据的旧非组副本是否存在
- 如果是,请使用该文件设置核心数据堆栈。然后使用
migratePersistentStore:toURL:options:withType:error:
将其移动到新位置。然后删除旧副本。 - 如果旧版本不存在,只需照常使用新副本设置 Core Data。
关于ios - coredata - 移动到应用组目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27253566/