ios - 在 Widget/Today View Extension 中使用核心数据模型?

标签 ios ios8 ios-frameworks

我正在构建一个 Today View Extension(Widget),它需要与其包含的应用程序共享数据。我在包含的应用程序中使用了大量核心数据,因此我想使用核心数据作为在两个程序之间共享公共(public)数据库的一种方式。这意味着我还需要知道对象图模型和小部件代码中的所有模型类。

在 App Extension Programming 指南中,Apple 说我们应该使用将代码封装到框架中,以便在包含的应用程序和小部件之间共享它。但是在 Framework 编程指南中,它明确写道,Frameworks 应该只被创建来封装不特定于应用程序的代码,但应该封装可以普遍重用的代码。

所以我的问题是:

  • 构建一个封装我所有模型类 + 我的核心数据对象模型图的框架是否是在包含应用程序和小部件之间共享业务逻辑的好方法?
  • 您如何将整个核心数据模型包含到一个框架中,因为框架似乎并不是为这样做而设计的?

最佳答案

根据您的标准和要求,将您的核心数据堆栈封装在嵌入式框架目标中是有意义的。我想说这不仅是一个好方法,而且是唯一不重复模型和逻辑的方法。

我不确定您在第二个问题中所说的“框架似乎并非设计用于执行此操作”是什么意思。框架只是另一个目标,您应该能够创建一个核心数据模型文件,其目标成员是您的框架。然后,您可以在框架 API 中使用一些更高级别的方法,该方法根据框架中包含的模型返回 NSManagedObjectContext

您还需要为您的底层持久存储文件(通常是您的 sqlite 文件)设置一个应用程序组。为了让您的小部件和包含的应用程序能够读取和写入同一个文件,该文件必须在一个应用程序组中,并且两者都有权访问。

关于ios - 在 Widget/Today View Extension 中使用核心数据模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25250512/

相关文章:

ios - "UIPopoverPresentationController presentationTransitionWillBegin"使用 UIPopoverController 时崩溃

iphone - 使用 GMSReverseGeocodeResponse 解析地址时出现错误 com.google.HTTPStatus 代码 400

iphone - 如何添加 NSSpeechSynthesizer 类引用?

ios - Firebase Firestore 和 Protobuf 的词法或前身问题,这两个文件夹是问题所在

iphone - AFNetworking表单请求(在一个请求中上传多个文件)

ios - FlatMap 对 Int 类型数组发出警告,但对 String 类型数组则不发出警告

swift - 快速关闭 showDetailViewController

ios - 开发了一个框架,无法加载 'x'的底层模块

ios - 在 Swift 中使用枚举设计错误类型