2016-09-22 61 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)