2017-10-25 9 views
0

私の計画は、Ensemble 2を購入することです(スピード/効率などを利用するためです)が、私はそれをテストスウィフトプロジェクトで動作させることができるようにしようとしています。最初。これを行うには、私はv1を試しています。コアデータとアンサンブルとのiCloud同期

Swiftとのシンプルシンクをガイドとして使用して、私はxcodeプロジェクトにアンサンブルを組み込みました。

アプリを削除してから再追加すると、アプリのデータがiCloudに保存されているように見えます。リプレイして同期すると、iCloudから正しいデータが復元されます。私の問題は、同じapple/iCloudアカウントにサインインした2番目のデバイスでテストすることが、同じデータを使って同じことをすることです。 2つのデバイスからのデータはマージされません。ただし、各デバイスで作成されたデータは、アプリを再読み込みした後に独自のデバイスに復元されます。

これがどのようになる可能性がありますか?

問題が私が生成しているストアURLである可能性がありますか。多くのCore Data Stackセットアップは、Swift 3+(NSPersistentContainer)で自動的に行われるため、これらのことはユーザーが生成する必要はありません。ここでは、私は私のアンサンブルを設定するときに使用するストアのURLとモデルのURLの変数を生成しています方法です:

var storeDirectoryURL: URL { 
     return try! FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: true) 
    } 

var storeURL: URL { 

     return storeDirectoryURL.appendingPathComponent("VsSyncTest.sqlite") 
    } 

    // Setup Ensemble 

let modelURL = Bundle.main.url(forResource: "VsSyncTest", withExtension: "momd") 

答えて

0

私はそれが起こるのか想像することができる唯一の方法は、あなたのいずれかが異なるのiCloudアカウントを使用している場合で、か各デバイスのアンサンブル識別子が異なります。

iCloudドキュメントの共有は頑強であることにも注意してください。ファイルがローカルにコンテナに追加されただけで、すぐに他のデバイスに転送されるわけではありません。 (CloudKitバックエンドは、その点ではるかに優れていますが、E2のみです。)

シミュレータでテストする場合は、Debug > iCloud > Trigger Sync in Simulatorを使用してください。

+0

ありがとうございました。 iCloudアカウントは間違いなく同じです(それぞれサインアウトした後、再びサインインしました)。アンサンブル識別子は(両方のデバイスから削除され、xcodeからリロードされた)ものと同じです。シミュレータ上の同期を強制することは、いずれにも役立たなかった。私にできることは他にありますか?何が起こっているかについてのアイデアを与えるかもしれないとして、iCloudに保存されているものを見る方法がありますか? – mallowman

+0

私は、あなたが単に 'merge ... 'メソッドを呼んでいないと思っています。 'merge ... 'を呼ばないと、クラウドデータは持ち込まれません。ボタンやタイマーを追加してください(通知は機能しますが、信頼性はありません)。コンテナの内容を確認するには、 '〜/ Library/Mobile Documents/iCloud〜'に行ってください。 Macの場合、ホームフォルダとシミュレータで、ユーザフォルダを探してそこから移動します。 –

+0

明示的にmergeを呼び出しても差はありません。おそらく私のpersistentStore:store URLが間違っていて、別のものが両方のデバイスで使用されているのだろうかと思っています。それは可能ですか? Swift/xcodeの最新バージョンでは、バックグラウンドでコアデータスタックが設定されるため、正しいURLを引き出しているかどうかはわかりません。コードを使用して質問を編集します.... – mallowman

関連する問題