【发布时间】:2015-09-14 16:08:13
【问题描述】:
这就是我要做的:
我现在有
- 一个 iPhone 应用程序
- WatchKit 扩展
- 包含我所有共享类的 Cocoa Touch 框架
我想要实现的目标是拥有一个在我的 iPhone 应用和 WatchKit 扩展之间共享的持久存储(核心数据)。
这就是我到目前为止所做的事情
- 创建一个应用组以拥有一个共享容器。
- 将核心数据模型 (Model.xcdatamodeld) 添加到我的 Cocoa Touch 框架中。
- 在此模型中创建了一个实体
- 为此实体创建了一个 NSMangedObject 子类并添加到我的 Cocoa Touch 框架中
- 在我的 Cocoa Touch 框架中添加了一个 DataManager 类
我的 DataManager 中的初始化程序如下所示
public init() {
let sharedContainerURL: NSURL? = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.com.company.Project")
if let sharedContainerURL = sharedContainerURL {
let storeURL = sharedContainerURL.URLByAppendingPathComponent("Model.sqlite")
MagicalRecord.setupCoreDataStackWithAutoMigratingSqliteStoreAtURL(storeURL)
let station: Station? = Station.MR_createEntity()
}
}
我遇到的问题
当我从 iPhone 应用的 AppDelegate 初始化 DataManager 时,没有发生崩溃,但 station 将为零。
当我用let stations: [Station]? = Station.MR_findAll() as? [Station] 替换最后一行时,应用程序崩溃并显示以下错误:A fetch request must have an entity.
我在 GitHub 上搜索了所有 SO 和 Magical Records 问题,但找不到任何东西可以推动我朝着正确的方向前进。非常感谢所有帮助。
【问题讨论】:
-
无论您实现什么,都要考虑到 watchOS 2 扩展实际上是在手表本身上运行的。阅读过渡指南中的管理数据部分:developer.apple.com/library/prerelease/watchos/documentation/…
标签: swift core-data watchkit magicalrecord cocoa-touch