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

How do I call the CoreData proxy framework from WatchKit Extension?

我已经在 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 方面,它可以很好地调用函数,但是如果我尝试调用完全相同的函数,我会收到这个可怕的错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

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

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

感谢任何帮助或想法!

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

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

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

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

从这里开始:

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