发生了什么:
每当我创建新的Core Data对象时,我的应用程序都会挂起大约3秒钟。该对象不是一个大的或复杂的对象。
-
详细信息:
按下按钮,会创建一个新对象,设置属性,然后使用以下命令保存:
[[SharedCoreDataBackend managedObjectContext] save:&error];
这导致NSFetchedResultsController更新如下。我已经缩减了以下几行代码的速度:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:self.deletedRowIndexPaths withRowAnimation:UITableViewRowAnimationNone];
[self.tableView insertRowsAtIndexPaths:self.insertedRowIndexPaths withRowAnimation:UITableViewRowAnimationNone];
[self.tableView reloadRowsAtIndexPaths:self.updatedRowIndexPaths withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates];
}
-
所以......
任何想法是什么问题?是否还有一些我可以发布的测试或代码可以帮助解决这个问题?
答案 0 :(得分:5)
尝试使用像这样的委托方法......
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView beginUpdates];
}
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
{
switch(type) {
case NSFetchedResultsChangeInsert:
{
[tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
}
break;
case NSFetchedResultsChangeDelete:
{
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
break;
case NSFetchedResultsChangeUpdate:
{
[self configureCell:tableView cell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
}
break;
case NSFetchedResultsChangeMove:
{
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
}
break;
}
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView endUpdates];
}
答案 1 :(得分:0)
对于我的同伴Swifters希望我能救你几秒钟:
{{1}}