約 2000 個のオブジェクトを返す非常に基本的なフェッチ リクエストを実行しています。batchSize が 15 の NSFetchedResultsController を使用しています。
predicate= [NSPredicate predicateWithFormat:@"ANY tags.tagName==%@", currentTagObject.tagName];
[fetchRequest setPredicate:predicate];
NSSortDescriptor *sort= [[NSSortDescriptor alloc] initWithKey:@"createDate" ascending:NO selector:@selector(compare:)];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:15];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:appDelegate.managedObjectContext sectionNameKeyPath:@"createDay" cacheName:nil];
ただし、フェッチ リクエストには 10 秒以上かかります。何が起こっているかを確認できるように、SQLite デバッグを有効にしました。2000 個のエンティティすべてをフェッチしていると思いますが、実際の値を持つのは 15 個だけで、何らかの理由で 2000 個のオブジェクトをすべて調べてフォールトします。
フェッチ中に、次の行が何千回も表示されます。
2012-06-22 21:14:47.546 app[9227:707] CoreData: annotation: sql connection fetch time: 0.0107s
2012-06-22 21:14:47.551 app[9227:707] CoreData: annotation: total fetch execution time: 0.0171s for 15 rows.
2012-06-22 21:14:47.568 app[9227:707] CoreData: sql: SELECT 0, t0.Z_PK, t0.Z_OPT, t0.ZAUTHOREMAIL, t0.ZAUTHORNAME, t0.ZCREATEDATE, t0.ZISGLOBAL, t0.ZISLOCKED, t0.ZISNEW, t0.ZISPENDINGDELETE, t0.ZISPENDINGSYNC, t0.ZLASTUPDATED, t0.ZLOCALLYMODIFIEDDATE, t0.ZMETALASTUPDATED, t0.ZNOTEID, t0.ZNUMBEROFCHILDREN, t0.ZPARENTAUTHOREMAIL, t0.ZPARENTNOTEID, t0.ZROOTAUTHOREMAIL, t0.ZROOTNOTEID, t0.Z4PENDINGADDNOTES, t0.Z4PENDINGREMOVENOTES FROM ZMBNOTEOBJECT t0 WHERE t0.Z_PK IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ORDER BY t0.ZCREATEDATE DESC LIMIT 15
...thousands more lines exactly similar to the three above
私のテーブルには一度に 5 つのセルしか表示されないため、すべてのオブジェクトがすぐにエラーになる理由がわかりません。何が原因でしょうか? テーブルをスクロールしなくても、すべてのオブジェクトがすぐにエラーになるのはなぜですか? おそらく反復されて、どこかでアクセスされている可能性がありますか? 呼び出しNSArray *fetchedObjects = fetchedResultsController.fetchedObjects
によって、すべてのオブジェクトに何らかの障害が発生する可能性がありますか?