2017-06-07 57 views
0

我需要從Apple Watch和iPhone顯示和修改我的數據結構。使用Swift 3和Realm同步Apple Watch和iPhone

數據庫:

我現在使用的一個簡單的領域結構,其中我有一個對象,並能容納大量A的一個對象B

因此在iPhone上,用戶可以創建一個B並添加A並查看當然所有A和B的。

我想蘋果的手錶顯示當前B的所有A和給用戶增加新的A的他們目前B.

方式的機會,我試圖做到這一點:

我想將iPhone中的洞Realm文件移動到手錶或其他方式。 (這是從網上小費)

iPhone代碼:

override func viewDidLoad() { 
    super.viewDidLoad() 


    if WCSession.isSupported() { //makes sure it's not an iPad or iPod 
     let watchSession = WCSession.default() 
     watchSession.delegate = self 
     watchSession.activate() 

     transferRealmFile() 

     if watchSession.isWatchAppInstalled { 
      do { 
       try watchSession.updateApplicationContext(["foo": "bar"]) 
      } catch let error as NSError { 
       print(error.description) 
      } 
     } 
    } 
} 
func transferRealmFile(){ 
    if let path = Realm.Configuration().fileURL { 
     WCSession.default().transferFile(path, metadata: nil) 
    } 
} 

WathcKit擴展:

func session(_ session: WCSession, didReceive file: WCSessionFile) { 

    //set the recieved file to default Realm file 
    var config = Realm.Configuration() 
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) 
    let documentsDirectory = paths[0] 
    let realmURL = documentsDirectory.appendingPathComponent("data.realm") 
    if FileManager.default.fileExists(atPath: realmURL.path){ 
     try! FileManager.default.removeItem(at: realmURL) 
    } 
    try! FileManager.default.copyItem(at: file.fileURL, to: realmURL) 
    config.fileURL = realmURL 
    Realm.Configuration.defaultConfiguration = config 
} 

然後我打電話transferRealmFile()每次我寫境界時間。這工作,但我解決不了這個問題:

問題:

  1. 如果只watchKit應用程序啓動它不工作。
  2. Apple Watch對iPhone的操作方式不一樣。 (我想我需要改變didRecived代碼,但我不知道是什麼)

問:

你知道誰給解決這個問題2或者你也許知道更好的方式來處理這種情況,或將我們在iPhone之間進行交互的方式和WathcOS 3中的Watch更改?

回答

1

通過watchOS1,您可以使用AppGroups在iOS應用程序及其Watch擴展程序之間共享資源(甚至是您的Realm數據庫)。但是,Apple在watchOS 2中刪除了這個,所以現在通過WatchConnectivity來在iOS和watchOS應用程序之間共享數據的唯一方法。看看this的答案。

可悲的是WatchConnectivity框架要求WCSession是活躍在兩臺設備上傳輸數據,所以你不能真正圍繞問題1.

在我看來得到它是一個更好的解決方案,只傳達之間的變化這兩個應用程序並不發送整個Realm文件,因爲你的Realm文件可能會變得很大,因此向前和向後發送它可能需要大量時間和資源,而發送更改應該會更快。

相關問題