我目前有一個問題,當我的UITableViewController/UITableView使用NSFetchedResultsController時,FRC的fetchRequest上的fetchLimit爲4時顯示大約86個項目。我知道86個項目滿足獲取本身,並且我知道它們出現的原因是因爲didChangeObject:atIndexPath ...被86中的每一個調用,並且我插入爲默認實現類型。objectAtIndex:0] numberOfObjects]> fetchLimit
我的問題是爲什麼fetchLimit限制NSFetchedResultsController試圖「更改」(在這種情況下插入)的對象的數量?
我的應用程序用例是,第一個選項卡顯示了我在應用程序啓動時獲得的典型供稿項目(在側線上)。我將它們保存到CoreData上的一個單獨的上下文中,該上下文最終會合併到主線程的上下文中,併爲更改的內容啓動FRC回調。我的問題具體涉及沒有項目的初始情況。
這裏是我的fetchRequest:
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
fetchRequest.entity = [NSEntityDescription entityForName:ENTITY_CONTENT_ITEM inManagedObjectContext:managedObjectContext];
// Set a limit on the number of items returned
[fetchRequest setFetchLimit:4];
// Set a Predicate to limit the fetch to featured items only
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"featured == YES AND contentType == %d", contentType]];
// Set the sort descriptors
NSSortDescriptor *sortDateDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"sortDate" ascending:NO] autorelease];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDateDescriptor]];
將contentType以上僅僅是打破了什麼是應該在這個選項卡與其他選項卡中顯示的方式。特色是該項目上的布爾屬性,它更像是用於顯示目的的關閉開關。
這裏是我的didChangeObject:
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
switch(type) {
case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
[tableView cellForRowAtIndexPath:indexPath];
break;
case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
// Reloading the section inserts a new row and ensures that titles are updated appropriately.
[tableView reloadSections:[NSIndexSet indexSetWithIndex:newIndexPath.section] withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
我知道這將是很難回答這個問題,但即使的FRC如何決定多少次調用didChangeObject將是很有益的解釋。