NSUbiquitousKeyValueStore に問題があり、2 つのデバイス間で確実に同期することができません。それは私を怒らせ始めています。狂った。
私は自分のコードが次の呼び出しを行うのを見ています:
[[NSUbiquitousKeyValueStore defaultStore] setObject:_someData forKey:@"SomeData"];
[[NSUbiquitousKeyValueStore defaultStore] synchronize];
しかし、多くの場合、データが他のデバイスに表示されることはありません。
数秒以内に同期するのを見たことがありますが、1 時間待っても同期が見られないこともあります。デバイスを xcode に接続してデバッグを開始すると、データが突然表示される場合と表示されない場合があります。時々そうです。
この呼び出しを行った後、アプリを終了して再起動すると、投稿したばかりの新しいデータではなく、古いデータが表示されます。同じデバイス上。
アプリが起動したら、次のように呼び出します。
_someData = [[NSUbiquitousKeyValueStore defaultStore] stringForKey:@"SomeData"];
実行する必要のある初期化コードはないと仮定しています。私が見つけた例はありません。
それが機能するとき、それは非常にうまく機能します。
それから今夜、私はデバイスのログを見ていて、最後の終了の直後にこれを見つけました(そしてデータを送信しようとしました):
Jul 8 21:32:03 unknown syncdefaultsd[17296] <Warning>: Error writing storage for com.mycompany.myapp to /private/var/mobile/Applications/4AC8C56E-6060-408B-84F9-F7EC336221D9/Library/SyncedPreferences/com.mycompany.myapp.plist: Error Domain=NSCocoaErrorDomain Code=4 "The operation couldn’t be completed. (Cocoa error 4.)" UserInfo=0xde80d40 {NSFilePath=/private/var/mobile/Applications/4AC8C56E-6060-408B-84F9-F7EC336221D9/Library/SyncedPreferences, NSUnderlyingError=0xde80b20"The operation couldn’t becompleted. No such file or directory"}
そのパスは Apps サンドボックス (間違った GUID) からの有効なパスではないため、これが問題の原因ではないかと思います。私は開発中にアプリを削除して再インストールすることが多いので、古いパスがどこかにキャッシュされていて、そのデータを同期しようとしているのだろうかと思います。それをクリアする方法はありますか?
時々機能するので、すべての資格が正しく設定されていることを知っています。
[[NSUbiquitousKeyValueStore defaultStore] synchronize]
返品中YES
です。
他の誰かがこの問題またはそのエラーを見たことがありますか? アプリの起動時やクラウドにデータを送信するときに、他に何かする必要がありますか? ドキュメントと例によると、かなり簡単に思えます。