在我的項目中,我想同時使用一個Realm數據庫與我的iOS 10應用程序和我的watchOs 3應用程序。所以我所做的是將框架添加到三個不同目標的嵌入式二進制文件中。這發生了很好的工作,但watchKit擴展似乎無法識別我在iOS環境中創建的對象。這兩個設備之間如何共享Realm數據庫?與WatchOS共享領域數據
4
A
回答
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
對於夫特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)
作爲watchOS 2.0,應用羣組不再適用。 https://forums.developer.apple.com/thread/3927 – chrisamanse
我們唯一的選擇是使用'WatchConnectivity'框架。 – chrisamanse
哦!這對我來說是新聞!謝謝你的提醒! – TiM