0

ローカル データストアからデータをすぐに表示する必要があるアプリを作成しています。アプリが iCloud が利用可能かどうかを判断し始めると、バックグラウンド スレッドを起動します。

iCloud が利用可能になったら、persistentStore の「オプション」を変更して iCloud トランザクションの使用を開始できますか?

この状況で適切なアプローチが何であるかはわかりません。何をしようとしても、アプリケーションがクラッシュします。

もともと私はそれを持っていたので、iCloud チェックはバックグラウンド スレッドではなく、アプリは正常に動作しましたが、時折タイムアウトしました。

4

2 に答える 2

0

iCloudがいつ利用可能になるかを知る必要はありません。データを操作するだけで、iCloud に直接送信することはありません。iOS が代わりにそれを行います。そのため、いつ、どのようにデータを送信する必要があるかを知っているのは、それだけです。

于 2013-02-03T15:31:07.513 に答える
0

NSPersistentStoreいいえ、一度存在したオブジェクトのオプションを変更することはできません。オプションを指定できるのは、永続ストアを に追加するときだけNSPersistentStoreCoordinatorです。オプションの変更に最も近い方法は、コア データ スタック全体を破棄し、別のオプションでやり直すことです。

ただし、次の理由から、それは役に立ちません。

  • iCloud が利用可能であることを検出した場合でも (NSFileManagerその経由で、ubiquityIdentityTokenまたは を呼び出して を使用しているURLForUbiquityContainerIdentifier:と思います)、 への呼び出しがaddPersistentStoreWithType:configuration:URL:options:error:しばらくブロックされる可能性があります。iCloud に利用可能な新しいデータがある場合、永続ストアを追加するまでダウンロードは開始されず、ダウンロード プロセスが完了するまでそのメソッドは戻りません。そして時々、iCloud は明確な理由もなく、しばらくそのメソッドをブロックするだけです。

  • iCloud 以外のオプションを使用しているときにユーザーがデータを変更できるようにした場合、それらの変更は後でクラウドに自動的に送信されません。Core Data は、iCloud がアクティブな間にデータが変更された場合にのみ変更を iCloud に送信します。これにより、トランザクションが生成されます。ユーザーが行った変更を読み込んで再保存する必要があります。そうしないと、それらの変更がクラウドに反映されません。

残念ながら、iCloud で Core Data を使用する際に大きなつまずき点の 1 つにぶつかりました。Core Data が iCloud との通信を終了するまで、完全なデータ ストアを利用可能にすることはできません。これは、永続ストアを追加する呼び出しがそれまで返されないためです。そして、そのプロセスをスピードアップするために何もすることはできません. これは、Core Data で iCloud を使用し続ける場合に遭遇する頭痛の種の 1 つにすぎません。

データの性質によっては、2 つのデータ ストアを使用できる場合があります。1 つは純粋にローカルで、もう 1 つは iCloud 経由で同期されます。純粋にローカルのデータ ストアを利用できるようにし、iCloud のデータ ストアが十分に機能するように機能をまとめようとすることもできます。ただし、1 つのデータ ストアに固執すると、遅延が発生します。

于 2013-02-04T18:47:34.100 に答える