1

私は問題があります。私のiOSアプリは、いくつかのデータをフェッチし、保存されていない変更がある場合、非常に奇妙な動作をします。ご参考までに、一部のデータをWebサーバーと同期しているときに、動作全体が表示されます。完全同期を実行してから、変更を保存したかったのです。いくつかの回避策を試しましたが、どれも十分に機能していませんでした。

問題自体に:私はいくつかのエンティティをWebサーバーと同期します。それらはゾーン(それらの親)に編成され、ゾーン自体は建物内にあります。したがって、エンティティごとに、一致するゾーンがすでに存在するかどうかを照会し、存在しない場合は新しいゾーンを作成します。問題は、それらのゾーンが作成されたばかりの場合、それらのゾーンをフェッチできないことです(したがって、新しいが同一のゾーンが毎回作成されます)。また、新しく作成したゾーンを追加して変更すると、正しい建物を取得できなくなり、まったく同じクエリの結果が突然空になるという問題もあります。

これが設定されていることを確認しました[fetch setIncludePendingChanges:YES]。また、NSDictionaryResultTypeではなく通常の結果モードを使用しています(新しく挿入されたオブジェクトを考慮しないNSDictionaryResultType式を参照)。

誰かが助けてくれることを願っています。

4

2 に答える 2

1

Fetch リクエストは、コンテキストのフェッチ元である永続ストアにデータを保存したコンテキストからデータをフェッチします。新しい管理対象オブジェクトを作成するときは、それをコンテキスト (別名スクラッチ ブック) に作成しますが、永続ストアにはまだ作成しません。したがって、新しく作成されたオブジェクトを取得する前に、そのコンテキストの変更をストアに保存する必要があります。

于 2012-07-30T12:27:39.767 に答える
0

私があなたの説明を正しく理解していると仮定すると、データを取得するための述語はかなり複雑であり、コアデータが永続ストアから読み取られることを余儀なくされていると思います。したがって、管理対象オブジェクト コンテキストの変更は無視されます。

たとえば、次のようなデータモデルがあります

Category 1---n Icon

そして、すべてのカテゴリを取得したい

  1. アイコンを持っている(ゼロ以上)、
  2. 属性usableTRUE
  3. 属性enabledByAdminTRUE

次のような述語を使用します。

NSArray *predicates = @[[NSPredicate predicateWithFormat:@"icons.@count > 0"],
                        [NSPredicate predicateWithFormat:@"ANY icons.usable = 1"],
                        [NSPredicate predicateWithFormat:@"ANY icons.enabledByAdmin = 1"]];

NSCompoundPredicate *cp;
cp = [[NSCompoundPredicate alloc] initWithType:NSAndPredicateType
                                 subpredicates:predicates];

この複雑な述語は、コア データを永続ストアから直接読み取るように強制します。

私の解決策は、管理対象オブジェクトのコンテキストを保存し、後でデータを取得することです。

于 2015-03-11T13:43:49.060 に答える