[编辑]我正在改变这一点,以便更准确地解释我的问题,在更准确地指出问题之后。
我正在处理我的应用的核心数据,但我很难过。它每次都挂在这个方法中。没有崩溃,没有日志,没有任何东西。它只是挂起。
- (void)insertNewObject:(id)sender
{
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
Section *newSection = (Section *)newObject;
newSection.title = @"inserted";
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
我发现如果我将NSLogs放在这两个委托方法中:
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
他们只是被无数次召唤。
答案 0 :(得分:8)
好的,我明白了。我正在创造一个无限循环。
调用此委托方法:
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
然后这最终被调用因为我调用[self.tableView beginUpdates];在委托方法中。
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
Section *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
object.title = [NSString stringWithFormat:@"Chapter %i", indexPath.row];
cell.textLabel.text = object.title;
}
然后这个委托方法:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
问题是我在更新内容时实际上是在更改NSManagedObject的属性
object.title = [NSString stringWithFormat:@"Chapter %i", indexPath.row];
这导致controllerWillChangeContent:再次被调用,创建一个循环的循环。