与WatchOS共享领域数据

时间:2016-09-22 16:42:53

标签: ios swift realm watchkit watch-os-3

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

2 个答案:

答案 0 :(得分:5)

<强>更新 好的,感谢chrisamanse的单挑,我对此做了更多的研究。

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

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

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

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

在您的应用中启用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版本已过时。

答案 1 :(得分:0)

Swift 3

我使用以下代码在app和app扩展程序之间共享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)