2016-09-22 64 views
4

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

回答

5

更新: 好,感谢chrisamanse的抬头,我做了这方面的一些更多的研究。

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

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


原文: 的iOS应用程序和扩展(无论是现在小部件和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和斯威夫特的版本已经过时了,在这一点上。

+0

作为watchOS 2.0,应用群组不再适用。 https://forums.developer.apple.com/thread/3927 – chrisamanse

+0

我们唯一的选择是使用'WatchConnectivity'框架。 – chrisamanse

+0

哦!这对我来说是新闻!谢谢你的提醒! – TiM

0

对于夫特3

我用下面的代码来共享境界分贝的应用程序和附加应用之间:

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)