0

iCloud同期でiOSアプリを開発しています。iCloud同期をサポートするコアデータを使用してデータを保存した後、デバイス設定でiCloudドライブをオフにすると、アプリがUbiquityContainerに保存されたデータを読み取れませんでした。ユーザーのiCloudドライブがオフになっているときに、iCloud永続ストアデータをローカル/他の場所に移行したいと考えています。しかし、iCloud永続ストアを取得できませんでした。次の方法を試してみましたが、うまくいきませんでした。

NSPersistentStore *result = [self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                               configuration:nil
                                         URL:storeURL
                                     options:options
                                       error:nil];

結果はゼロです。ユビキタス ストアの正確な storeURL を取得できなかったためです。

 NSURL *iCloudURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:@"iCloud.com.Identifier"];

url の代わりに nil を指定します。iCloud ドライブをオフにした後で iCloud ストアを取得する方法はありますか。保存されたデータを表示できなかったためです。

4

1 に答える 1

1

次の Apple ドキュメントからの抜粋を参照してください ( https://developer.apple.com/library/ios/documentation/General/Conceptual/iCloudDesignGuide/Chapters/DesignForCoreDataIniCloud.html )

iCloud Core Data アプリの起動シーケンスを設計する

iCloud を採用する場合は、アプリの起動シーケンスを設計する際に特に注意してください。次の要因が関係し、それらを考慮する必要があります。

  • ユーザーは、以前にアプリで iCloud を使用することを選択した可能性があります。アプリのローカル インスタンスは、ユビキタス コンテナーに最初のストアを確立している場合と確立していない場合があります。

    起動シーケンスの最初のステップとして、共有 NSUserDefaults オブジェクトを使用してローカル ユーザー デフォルト データベースを読み取ります。アプリの操作中に、そのオブジェクトを使用して、次回の起動時に必要になるユーザーの選択を保存します。

  • ユーザーが iCloud からログアウトするか、別のアカウントに切り替える可能性があります。

    ユーザーが iCloud からログアウトするか、別のアカウントに切り替えると、以前に使用されていたアカウントのユビキタス コンテナーはアプリで使用できなくなります。


  • ローカル Core Data ストアは、同じユーザーが所有する別のデバイス上のストアよりも新しいか古い可能性があります。

    アプリの起動時に、Core Data は、iCloud からの変更ログを使用してローカル ストアを調整する必要がある場合があります。これには、重複レコードと競合の検出と解決が含まれる場合があります。テストは重要です。いくつかのヒントから始めるには、iCloud アプリのテストとデバッグ、および Core Data の iCloud プログラミング ガイドのベスト プラクティスとトラブルシューティングを参照してください。

于 2015-08-12T22:51:46.767 に答える