iMessage 扩展和 CoreData

Kev*_*ser 1 core-data ios imessage swift swift3

我正在尝试从iMessage 扩展( MSMessagesAppViewController)中读取CoreData,但由于没有 AppDelegate,因此也没有.managedContext

有没有人知道这是否可能?是否可以“实例化 AppDelegate”我的应用程序或类似的东西?

更新:如何访问应用程序扩展中的核心数据:解决方案是使用 AppGroup 容器。

Tom*_*ton 5

使用 Core Data 与是否有应用程序委托无关。它们是两个不同的东西。你可以将它们放在一起,但 Core Data 和应用程序委托都不需要这样做。这样做甚至不是很好的设计。应用程序委托的工作是响应应用程序生命周期事件,例如启动、进入后台等,并且将管理应用程序数据的单独工作混合在一起是糟糕的设计。

如果您在 Xcode 中创建一个新项目并选中“使用核心数据”框,则 Xcode 将在应用程序委托类中包含用于为应用程序设置核心数据的方法。但该代码可以放在任何类中。要求该代码位于该类中的应用程序委托没有什么特别之处。仅仅因为 Xcode 将该代码放在那个类中并不意味着它是必要的这样做。如果您需要在应用程序扩展中使用 Core Data,这就是您要做的。

一种常见的方法是创建一个新类来管理 Core Data。将所有 Core Data 堆栈管理代码放在那里,而不是放在应用程序委托中。应用程序委托可能会在您的应用程序中创建此类的实例。在应用程序扩展中,可以在需要扩展类型的任何地方实例化该类。