【问题标题】:Share Realm Data with WatchOS与 WatchOS 共享领域数据
【发布时间】:2017-01-31 08:36:01
【问题描述】:

在我的项目中,我想在我的 iOS 10 应用程序和 watchOs 3 应用程序中同时使用一个 Realm 数据库。所以我所做的是将框架添加到三个不同目标的嵌入式二进制文件中。这恰好工作得很好,但 watchKit 扩展似乎无法识别我在 iOS 环境中创建的对象。这两个设备之间怎么可能有一个共享的领域数据库?

【问题讨论】:

    标签: ios swift realm watchkit watchos-3


    【解决方案1】:

    更新: 好的,感谢chrisamanse 的提醒,我对此进行了更多研究。

    事实证明,在 watchOS 2 上不再支持应用组。手表应用不再作为扩展程序在手机上运行;它们现在是两个独立的进程,没有任何共享资源。

    因此,这意味着有必要在手表和手机上维护一个单独的 Realm 文件,并通过 WatchConnectivity 框架传达对两者所做的任何更改。


    原文: iOS 应用程序和扩展程序(Today 小部件和 watchOS 应用程序)需要被视为两个完全独立的实体,位于各自独立的容器中。默认情况下,扩展无法访问其父应用程序容器内的任何文件。如果您将 Realm 文件保存到默认路径(即“文档”文件夹),则 watchOS 应用无法从那里访问它。

    值得庆幸的是,可以使用 iOS 的“应用程序组”功能来指定父 iOS 应用程序和 watchOS 应用程序都可以访问的共享文件夹,并且可以读取和写入其中的任何 Realm 文件。

    在应用中启用App Groups 授权后,只需将 Realm 文件的位置设置为指向该位置即可。

    let sharedContainerURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.my.appgroups.bundleid")!
    let realmURL = sharedContainerURL.appendingPathComponent("SharedRealm.realm")
    
    let realmConfiguration = Realm.Configuration()
    realmConfiguration.fileURL = realmURL
    let realm = try! Realm(configuration: realmConfiguration)
    

    a tutorial on the Realm website 更详细地解释了如何使其工作,但是 API 和 Swift 版本此时已过时。

    【讨论】:

    • 从 watchOS 2.0 开始,应用组不再适用。 forums.developer.apple.com/thread/3927
    • 我们唯一的选择是使用WatchConnectivity 框架。
    • 哦!这对我来说是个新闻!感谢您的提醒!
    • 嗨@TiM,如果我尝试在应用程序、共享扩展或键盘扩展之间共享默认领域数据库,我需要使用什么,我有这个问题:github.com/realm/realm-cocoa/issues/5594,任何帮助,请? T_T
    【解决方案2】:

    对于 Swift 3

    我使用以下代码在应用程序和应用程序扩展之间共享 Realm db:

    let sharedDirectory: URL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.your.app")! as URL
    let sharedRealmURL = sharedDirectory.appendingPathComponent("db.realm")
    Realm.Configuration.defaultConfiguration = Realm.Configuration(fileURL: sharedRealmURL)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      相关资源
      最近更新 更多