NSFetchedResultsController尝试限制显示的logging数
当创build一个NSFetchedResultsController
传递给我的NSFetchedResultsController时,我将fetchLimit属性设置为3。
现在最初这似乎工作正常。 我可以以任何方式修改前三个返回的对象,改变它们的顺序,并且全部重新正确。 当我改变一个最初落在前三个物体之外的物体时,会出现这个问题,现在将其引入前三个物体,或者只是添加一个新的物体,使其出现在前三个物体中。
我期望发生的事情:插入的物体将其余部分向下推,一个从底部落下。
究竟发生了什么:插入的对象将其余部分向下推, logging数增长到4 ?!
任何人都可以解释这个,或者我应该如何处理这个?
我已经取得了一些进展,基本上通过忽略numberOfObjects
并返回我希望表固定的实际长度。 这在controller:didChangeObject:...
需要一点小controller:didChangeObject:...
但似乎到目前为止工作。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return kTableSize; //return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects]; } - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath { UITableView *tableView = self.myTableView; switch(type) { case NSFetchedResultsChangeInsert: // Only modify table if insert will effect visible rows if (newIndexPath.row < kTableSize) { // Delete last row to maintain fixed length [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:(kTableSize - 1) inSection:newIndexPath.section]] withRowAnimation:UITableViewRowAnimationAutomatic]; [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } break; case NSFetchedResultsChangeDelete: // Only modify table if delete will effect visible rows if (indexPath.row < kTableSize) { [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; // Insert extra row to maintain fixed length [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:(kTableSize - 1) inSection:newIndexPath.section]] withRowAnimation:UITableViewRowAnimationAutomatic]; } break; case NSFetchedResultsChangeUpdate: // Only modify table if update will effect visible rows if (indexPath.row < kTableSize) { [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } break; case NSFetchedResultsChangeMove: // Only modify table if move will effect visible rows if ((indexPath.row < kTableSize) || (newIndexPath.row < kTableSize)) { // Delete old row or last row of table if (indexPath.row < kTableSize) { [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } else { [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:(kTableSize - 1) inSection:newIndexPath.section]] withRowAnimation:UITableViewRowAnimationAutomatic]; } // Insert new row or a row at bottom of table if (newIndexPath.row < kTableSize) { [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } else { [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:(kTableSize - 1) inSection:newIndexPath.section]] withRowAnimation:UITableViewRowAnimationAutomatic]; } } break; } }
还需要注意tableView:cellForRowAtIndexPath:
确保我们不尝试访问一个对象,如果对象比表长度less,就不存在。
- 如何在Swift中为NSManagedObject子类创build一个指定的初始值设定项?
- 使用UICollectionView和NSFetchedResultsController不保存
- NSManagedObject – 如何获取属性的types
- 我可以在一个应用程序中创build一个核心数据对象图,然后在另一个预设状态下使用它吗?
- 如何在今天的扩展(iOS)中访问CoreData模型
- CoreData谓词:string属性的长度?
- UITableView内部错误:无法生成一个新的部分地图与旧的部分数:和新的部分数:with userInfo(null)
- RestKit核心数据NSError dealloc崩溃
- 使用NSPredicate如何使用1个实体过滤来自核心数据的值