2011-12-24 6 views
2

iCloudをサポートするために、ローカルのCore Data-drivenアプリを更新しています。私が予想している1つの課題は、私が「在庫オブジェクト」と呼んでいるものの周りにあります。ユーザーが99%のユーザーをカスタマイズする最初の打ち上げ時にアプリが提供するデータです。コアデータ、iCloud、およびストックオブジェクト

証券は、ユーザは、新しいデバイス上で初めてアプリを起動した場合、私はデフォルトの動作はためになると思います

Item A 
Item B 

カスタマイズが

Tomatoes 
Potatoes 

オブジェクトオブジェクトiCloud永続ストア(アイテムA、アイテムB、トマト、ジャガイモ)からのカスタマイズされたオブジェクトとマージされるストックオブジェクトの再作成により、混乱を招くyユーザーエクスペリエンス

最初の起動時にiCloudデータを同期してチェックし、存在する場合は在庫オブジェクトを作成しないことが考えられます。しかし、ユーザーは最初の起動時にオフラインになり、2回目の起動時に、ローカル在庫オブジェクトとiCloudカスタムオブジェクトの同じ望ましくないマージが発生します。

iCloudマージにロジックを追加する方法はありますか?クラウド(トマトとジャガイモ)のカスタマイズされたオブジェクトが到着すると、ビームアップする前にローカル在庫オブジェクト(アイテムAとアイテムB)を削除するように通知できますか?

ありがとうございます!

答えて

0

これが最善のアプローチである場合、私はわからないんだけど、これは私がやっているものです:

  1. をユーザーがiCloudのを有効にすることを選択した場合、そのiCloudのディレクトリが空の場合、私は確認してください。
  2. もしそうなら、問題はありません。既存のすべてのデータがクラウドに移行するように、iCloudオプションが有効になっている新しいローカルストアにデータベースを移行します。
  3. そうでない場合は、ローカルデータベースが空であるかどうかを確認します。そうであれば、私はすべてのストックオブジェクトを一掃し、すべてを雲から取ります。そうでない場合、私は現在、ユーザーにローカルデータベースとiCloudデータベースをマージすることはできず、データの削除(または再インストール)を依頼して、この問題を回避していることを伝えます。
0

なぜシードオブジェクトを提供しないことでこれを回避できますか?最初の起動時にUIを使用して自分のオブジェクトを入力するようにユーザーに促すだけです。彼女が以前にアプリを使用していたかどうかを尋ね、iCloudとの同期を待ってオブジェクトを再作成する前に支払うかもしれないことを説明します。

+0

まあ、私はその前払いでユーザーを困らせたいとは思っていません。もう1つの問題は、私が特別な方法で対処する必要のあるストックオブジェクトでいっぱいのエンティティ全体があることです。 Foodsエンティティとの関係で、在庫FoodTypeオブジェクト(「肉」、「野菜」、「デザート」など)を想像してください。たとえそれらのプロパティがすべて一致していても、それらが異なるデバイス上で異なる時間に作成された場合、コアデータはそれらを別個のものと見なすようです。ですから、合併が起こると、突然私は2つの「食肉」FoodTypesを持っています。いくつかの食べ物は1つのオブジェクトにリンクし、いくつかは他のオブジェクトにリンクしています。 – ed94133

+0

私も同様のケースがありました。私は有用だったシードオブジェクトを提供しました - ほとんどは変更されませんでした。 1つの簡単な考え方は、ブール値の属性 'validated'を追加してそこから論理を取ることです。その後、ユーザーが気づかずに、等価性を確認してバックグラウンドで「マージ」することができます。 – Mundi

関連する問題