Apple WatchでのRealmのローカルデータの取り扱い方について教えてください
iPhoneからApple WatchへRealmのデータ転送を行って、Apple Watchでデータを表示したいと思っています。
やりたいことは以下の通りです。
- iPhoneからApple WatchへRealmのデータを転送してデータを表示したい
- iPhoneからApple Watchにデータ転送できない場合は、Apple Watchにある(最後に転送された)Realmデータを表示
- iPhoneとApple Watchと通信ができる時には常にiPhoneのRealmデータを転送して最新の状態にしたい
別質問で以下の内容でiPhoneからApple Watchへデータ転送ができることを確認しました。
// When the file was received
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")
try! FileManager.default.copyItem(at: file.fileURL, to: realmURL)
config.fileURL = realmURL
Realm.Configuration.defaultConfiguration = config
// display the first of realm objects
let realm = try! Realm()
}
しかし、2回目の処理時に try! FileManager.default.copyItem(at: file.fileURL, to: realmURL) で以下のエラーが確認されました。
fatal error: 'try!' expression unexpectedly raised an error: Error
Domain=NSCocoaErrorDomain Code=516 "“data.realm” couldn’t be copied to
“Documents” because an item with the same name already exists."
(すでにファイルが存在しているということでエラーになっているものかと思うのですが、、)
この場合は FileManager.default.fileExists(atPath: realmURL.absoluteString) でデータが存在しているかを確認して、ファイルがあれば、コピーは行わずに読み込みを行うという流れで問題ないでしょうか?
(それともローカルにあるRealmデータを削除して、もう一度通信時に転送したパスからデータをコピーするという流れでしょうか・・・?)
また、2回目以降(Realmデータ読み込みした後の起動時)にはデータのパスから読み込みを行えば、Realmからデータを読み込むことができるのでしょうか?
(言い換えると、 Realm.Configuration.defaultConfiguration で設定したものはアプリ終了後も有効なのでしょうか?)
かなり具体的な内容ですが、わかる方がいましたらご教授いただければと思います。
よろしくお願いいたします。