ios - coredata - 移动到应用组目标

标签 ios core-data ios8-today-widget

我是 Today 扩展的新手,使用的是嵌入式框架。

我们的应用目前使用由 sqlite 支持的核心数据。如果我想在应用程序和今天的扩展之间共享它,我应该将它移动到一个框架以供两者共享吗?

如何迁移应用商店中的当前版本以便能够升级到新结构?

最佳答案

您需要确保模型和持久存储文件对应用和扩展都可用。

对于模型,将其移动到框架是一个好主意,因为这意味着模型文件只有一个副本。只要应用程序和扩展都链接到框架,它们就可以使用。如果这样做,将设置核心数据堆栈的代码也放入框架中可能是个好主意,因为在这两种情况下它都是相同的。

您当然可以只在两个目标中包含模型。这意味着您将拥有该文件的两个副本,这会浪费空间。不过可能空间不大。

对于持久存储,您必须设置应用组并使用组目录中的存储文件。应用组是应用和扩展的“功能”中的一项设置——打开它并创建一个组名。然后将持久存储文件放在组目录中,您可以使用如下代码找到该目录

NSURL *groupURL = [[NSFileManager defaultManager]
    containerURLForSecurityApplicationGroupIdentifier:
        @"GROUP NAME HERE"];

[我更详细地介绍了其中的一些内容 at my blog ].

如果您有现有数据,则必须将其移动到新的商店文件中。这看起来像

  1. 检查数据的旧非组副本是否存在
  2. 如果是,请使用该文件设置核心数据堆栈。然后使用 migratePersistentStore:toURL:options:withType:error: 将其移动到新位置。然后删除旧副本。
  3. 如果旧版本不存在,只需照常使用新副本设置 Core Data。

关于ios - coredata - 移动到应用组目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27253566/

相关文章:

ios - NSMutableString stringWithString 使应用程序崩溃

ios - 当我删除包含核心数据的单元格时,同一单元格显示两次

ios - NSUserDefaultsDidChangeNotification 和今天的扩展

ios - XCUITest 和今日小部件

ios - 如何将一张图片放在另一张图片前面?

ios - 有没有办法在 SwiftUI 中关闭没有动画的模态视图?

ios - 为什么我的 CGImage 是 UIImage 的大小的 3 倍

iOS 7 : What happened to UIDocument/UIManagedDocument and iCloud?

ios - 从后台重新启动应用程序后 Iphone 重新启动

iOS 应用内购买 + Today Extension 小部件