如何从 WatchKit Extension 调用 CoreData 代理框架?

Posted

技术标签:

【中文标题】如何从 WatchKit Extension 调用 CoreData 代理框架?【英文标题】:How do I call the CoreData proxy framework from WatchKit Extension? 【发布时间】:2015-06-11 16:28:20 【问题描述】:

我已经在 Xcode 中设置了一个 iPhone 应用程序,并添加了一个 Cocoa-Touch ios 框架来按照苹果的建议处理数据。

基本上,我已经完成了本教程中的所有内容:

http://www.telerik.com/blogs/send-data-to-apple-watch-with-core-data-and-telerik-ui-for-ios-in-swift

在 iPhone 端调用函数可以正常工作,但是如果我尝试调用完全相同的函数,我会收到这个可怕的错误:

致命错误:在展开可选值时意外发现 nil

在逐行注释和运行代码后,我确定这是有问题的行(同一行在两个数据处理函数中):

var entity = NSEntityDescription.entityForName("ChartDataEntity", inManagedObjectContext: self.managedObjectContext!)

任何帮助或想法表示赞赏!

【问题讨论】:

【参考方案1】:

错误为unexpectedly found nil while unwrapping an Optional value。当它使用self.managedObjectContext! 时,您的代码行恰好展开了一个可选的,所以这就是问题所在。出于某种原因,您尝试使用self.managedObjectContext,但您尚未将其初始化为具有任何值。您需要先设置上下文和 Core Data 堆栈的其余部分,然后才能使用它。

在该教程中,lazy var managedObjectContext: NSManagedObjectContext? 如果无法创建持久存储协调器,它可能会返回 nil。如果它不能创建持久存储文件,那么它又可能为零。在解决问题之前,您需要弄清楚为什么 self.managedObjectContext 为 nil。

【讨论】:

【参考方案2】:

我发现了问题所在。我已将框架中的文件添加到 iphone 应用程序的目标以及 watchkit 扩展程序,Apple 建议无论如何都不允许这样做,如果您尝试这样做,他们会阻止您的应用程序进入商店:https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html

无论如何,如果您遇到这种情况,您需要做的就是取消选中目标(数据模型和 swift 文件):

从这里开始:

所以只有你的框架被勾选为目标。现在我的手表应用程序可以与 CoreData 一起使用!那是痛苦的几天...

【讨论】:

以上是关于如何从 WatchKit Extension 调用 CoreData 代理框架?的主要内容,如果未能解决你的问题,请参考以下文章

Watchkit , openParentApplication 和 WatchKit 扩展

如何从父 iphone 应用程序触发 watchkit 应用程序?

如何从 WatchKit 正确获取心率?

如何从 WatchKit 正确获取心率?

如何从 WatchKit 滑块中隐藏“+”和“-”按钮?

如何从 Siri Intent Extension 拨打网络电话?