我正在尝试从 iMessage扩展(MSMessagesAppViewController)中读取 CoreData ,但由于没有AppDelegate,因此也没有managedContext
。
有人知道这是否可行? 是否有可能“实例化我的应用程序的AppDelegate”或类似的东西?
更新:如何访问应用和扩展程序中的核心数据:此解决方案是使用AppGroup容器。
答案 0 :(得分:4)
使用Core Data与是否存在应用程序委托无关。它们是两个不同的东西。您可以将它们放在一起,但Core Data和应用程序委托都不需要。这样做甚至不是很好的设计。应用程序代表的工作是响应应用程序生命周期事件,如启动,进入后台等,并且它的糟糕设计也混合在管理应用程序的单独工作中数据
如果您在Xcode中创建一个新项目并检查"使用Core Data"在框中,Xcode将包含app delegate类中的方法,以便为应用程序设置Core Data。但该代码可以在任何类中进行。应用程序委托没有什么特别之处,要求代码在该类中。仅仅因为Xcode将该代码放在该类中并不意味着它必须必要才能这样做。如果您需要在应用扩展程序中使用核心数据,那就是您要做的事情。
一种常见方法是创建一个新类来管理Core Data。将所有Core Data堆栈管理代码放在那里,而不是放在app delegate中。应用程序委托可能会在您的应用程序中创建此类的实例。在应用扩展程序中,可以在扩展类型所需的任何位置实例化该类。