我有一个奇怪的问题,我无法弄清楚。我有一个相当典型的从 SQLite 存储中获取对象的UIViewController
aUITableView
和a 。NSFetchedResultsController
提取工作正常,表格工作正常,具有典型的NSFetchedResultsController
样板:
-(void)controllerWillChangeContent:(NSFetchedResultsController *)controller{
[self.tableView beginUpdates];
}
-(void)controller:(NSFetchedResultsController *)controller didChangeSection:(id<NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type{
if(type==NSFetchedResultsChangeInsert){
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
} else if(type==NSFetchedResultsChangeDelete){
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
}
}
-(void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath{
UITableView *tV = self.tableView;
if(type==NSFetchedResultsChangeInsert){
[tV insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
} else if(type==NSFetchedResultsChangeDelete){
[tV deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
} else if(type==NSFetchedResultsChangeUpdate){
[self configureCell:[tV cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
} else if(type==NSFetchedResultsChangeMove){
[tV deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tV insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller{
[self.tableView endUpdates];
}
我遇到的问题是任何关系为 nil 的对象(即使关系属性不涉及谓词或排序描述符中的获取请求)在任何时候从获取的结果中消失(controller:didChangeObject:
被调用NSFetchedResultsChangeDelete
)以任何方式更新(例如更改不相关的属性)。如果我重新执行提取,该对象将返回。
即使我在 fetch 请求中不使用谓词,也会发生这种情况。
有人知道这里会发生什么吗?