这是我的工作:
我现在有
- iPhone 应用
- WatchKit 扩展
- 一个包含我所有共享类的 Cocoa Touch 框架
我想要完成的是拥有一个在我的 iPhone 应用程序和 WatchKit Extension 之间共享的持久存储(核心数据)。
这就是我到目前为止所做的
- 创建应用组以拥有共享容器。
- 将核心数据模型 (Model.xcdatamodeld) 添加到我的 Cocoa Touch Framework。
- 在此模型中创建了一个实体
- 为此实体创建了一个 NSMangedObject 子类并将其添加到我的 Cocoa Touch Framework
- 向我的 Cocoa Touch Framework 添加了一个 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
将为 nil。
当我将最后一行替换为 let stations: [Station]? = Station.MR_findAll() 作为? [Station]
应用程序崩溃并显示以下错误:A fetch request must have an entity.
我已经在 GitHub 上搜索了所有 SO 和 Magical Records 问题,但找不到任何可以将我推向正确方向的内容。非常感谢所有帮助。
最佳答案
感谢Leo Natan的评论 我现在意识到我应该将我的核心数据存储在我的 iPhone 应用程序的沙箱以及我的 WatchKit 应用程序的沙箱中。而不是在共享容器中,就像我尝试的那样。
在为 Watch OS 2 构建时,我将能够使用 WatchKit Connectivity Framework 使两个数据库保持同步。与此同时,我可以使用像 MMWormhole 这样的解决方案实现同样的目标。
关于swift - Core Data (Magical Record) + WatchKit Extension + Cocoa Touch Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31094605/