NSFetchedResultsController の最初のフェッチで O オブジェクトが返されます。ほとんどの場合 (10 回中 9 回)。常に再現可能なバグではありません。
テーブルの要件が変わり、述語が変わることがあります。その場合、キャッシュを削除し、再作成する前に FetchedResultsController を nil に設定します。これらの後続のフェッチでは、常に正しいオブジェクトが返されます。
問題のフェッチは、関係が関係しているエンティティからオブジェクトを取得します。
NSFetchRequest *fetch = [NSFetchRequest fetchRequestWithEntityName:@"FacebookPost"];
fetch.predicate = [NSPredicate predicateWithFormat:@"postedBy.facebookID == %@", self.user.facebookID];
|User| という 2 つのエンティティがあります。と |FacebookPost| ユーザーは、facebookPosts という名前の FacebookPost と 1 対多の関係を持っています FacebookPost は、postedBy という名前のユーザーに対して多対 1 の関係を持っています ユーザーは、私が述語で使用している facebookID を持っています (上記を参照)
データベースの準備ができていない場合に備えてフェッチを遅らせようとしましたが、役に立ちませんでした。
これが(ほとんどの場合)最初のフェッチで正しくフェッチされない理由を誰でも考えられますか?
アップデート:
Xcode で sql デバッグを有効にすると、動作するときと動作しないときに別の SQL ステートメントを任意に使用します。
働いた:
2013-03-27 06:41:58.420 App[5995:907] CoreData: sql: SELECT COUNT( DISTINCT t0.Z_PK) FROM ZFACEBOOKPOST t0 WHERE t0.ZPOSTEDBY = ?
2013-03-27 06:41:58.432 App[5995:907] CoreData: sql: SELECT 0、t0.Z_PK、t0.Z_OPT、t0.ZMESSAGE、t0.ZSTATUSID、t0.ZTIME、t0.ZPOSTEDBY FROM ZFACEBOOKPOST t0 WHERE t0.Z_PK IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ORDER BY t0.ZTIME説明制限 20
うまくいきませんでした:
2013-03-27 06:24:06.638 App[66275:c07] CoreData: sql: SELECT COUNT( DISTINCT t0.Z_PK) FROM ZFACEBOOKPOST t0 JOIN ZUSER t1 ON t0.ZPOSTEDBY = t1.Z_PK WHERE t1.ZFACEBOOKID = ?
2013-03-27 06:24:06.641 App[66275:c07] CoreData: sql: SELECT 0、t0.Z_PK、t0.Z_OPT、t0.ZMESSAGE、t0.ZSTATUSID、t0.ZTIME、t0.ZPOSTEDBY FROM ZFACEBOOKPOST t0 JOIN ZUSER t1 ON t0.ZPOSTEDBY = t1.Z_PK WHERE t1.ZFACEBOOKID = ? t0.ZTIME DESC による順序
したがって、コアデータがSQLでフェッチを実行することを決定する方法に関係していると思われます。