1

CoreDataとiCloudを使用して複数のiPad間でデータを同期するアプリに取り組んでいます。これはすべて正常に機能しており、各iPadにデータを追加すると、すべてのiPad間で同期されます。

国のリストが事前に入力されているCoreDatasqliteファイルがあり、アプリの最初の実行時にこれをドキュメント領域にコピーしたいと思います。私はこれを機能させましたが、persistentStoreCoordinatorの実装を変更して、iCloudのサポートをテストするかどうかをテストし、その他いくつかの小さな変更を加えました。

ただし、sqliteファイルが存在するかどうかを確認し、存在しない場合は事前に入力されたsqliteファイルをコピーすると、次のエラーが発生します。

[psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:iCloudData] options:options error:&persistentStoreError];

NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error :: CoreData:Ubiquity:ユビキタス統合のセットアップ中にエラーが発生しました:Error Domain = NSCocoaErrorDomain Code = 134316 "ユビキタスコンテナがこの永続ストアと一致していないようです。これは、次の可能性があります別のiCloudアカウントに切り替えるか、iCloudから完全にログアウトすることが原因です。ストアは読み取り専用属性で再度開くか、iCloud同期から完全に削除する必要があります。」UserInfo = 0x1cb590 {storeUUID = 31381598-EAFA-4550-9B96-F501800974D5、containerUUID = E3A8DC7D-41FD-405A-8D8A-C06C8B467CA2、NSLocalizedDescription =ユビキタスコンテナがこの永続ストアと一致していないようです。これは、切り替えが原因である可能性があります別のiCloudアカウントに移動するか、iCloudから完全にログアウトします。

これは、iCloudに別のCore Data sqliteファイルまたはトランザクションログファイルへの参照がまだあるためですか?もしそうなら、どのようにそれらを削除しますか?

4

1 に答える 1

4

事前に作成されたコア データ ストアをユビキタス コンテナーにコピーすることは想定されていません。これを行う古い方法は、シミュレーター/デバイス/コンピューター上に SQLite ファイルを作成し、最初の実行時にその場所にコピーすることでした。iCloud を使用している場合は、これ以上行うことはできません。iCloud は、各デバイスが変更のリストを「トランザクション ログ」として受け取り、それを独自の SQLite ストアに適用することで機能します。何が変更されたかを知る必要があり、.sqlite ファイルを 1 つの塊として取得しても、それはわかりません。

これを行うiCloudの方法は次のいずれかです。

  • insertStartData:コード (メソッドなど)内から初期データを作成します。plistから追加することも、好きなものを追加することもできます。最初にデータがまだ存在しないことを確認する必要があります。
  • を使用して、最初NSPersistentStoreCoordinatormigratePersistentStore:toURL:options:withType:errorストアをコピーします。

ドキュメントは次のとおりです。

あらかじめパッケージ化されたデータベース ファイルを使用して初期コンテンツをシードしないでください。代わりに、コードでデフォルト項目を作成するか、NSPersistentStoreCoordinator の migratePersistentStore:toURL:options:withType:error: メソッドを使用して、事前にパッケージ化されたデータベースを必要な場所に移行する必要があります。

于 2012-04-15T12:10:47.617 に答える