swift - Core Data (Magical Record) + WatchKit Extension + Cocoa Touch Framework

标签 swift core-data watchkit magicalrecord cocoa-touch

这是我的工作:

我现在有

  • 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/

相关文章:

ios - preferredStatusBarStyle 不工作

ios - 如何让相机功能仅显示在一个标签栏项目中?

iphone - 如何识别核心数据管理对象模型——哈希?

ios - 数据结构和数据模型之间的区别 - 例如?

swift - 使用三个数组填充复杂时间线

ios - 如何检查方法 systemFontOfSize(fontSize : weight:) exist in iOS

ios - View Controller 无法访问数组中的元素

ios - 核心数据-根据应用程序版本不同的数据

ios - 如何创建类似于 BBC 新闻应用程序中的 Glance?

ios - 初始化程序不会覆盖指定的初始化程序 Swift WatchKit