一直关注Apple's developer site上的核心数据教程,一切都很好,直到我必须向获取的商店添加内容。成功构建并在我尝试向列表中添加新项目时加载时出现此错误:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新后的现有部分中包含的行数(0)必须等于行数在更新(0)之前包含在该部分中,加上或减去从该部分插入或删除的行数(插入1个,删除0个)。
由于fetch运行得很好,如果我用eventList = [[NSMutableArray alloc] init]
取代提取它按预期工作(当然没有持久性),我被引导相信问题来自于正确创建可变阵列。这是代码中有问题的部分:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults = nil) {
//Handle the error
}
[self setEventList:mutableFetchResults];
[mutableFetchResults release];
[request release];
我尝试用NSArray
s切换第二个块中的NSMutableArray
,但我仍然遇到同样的错误。
作为参考,我尝试添加条目时抛出错误的代码部分位于:
[eventList insertObject:event atIndex:0];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
在insertRowsAtIndexPaths
来电时出错。
提前感谢您提供任何帮助
- 编辑添加 -
我应该注意,通过返回[eventList count]
答案 0 :(得分:1)
嗯,if (mutableFetchResults = nil)
有一个拼写错误 - 当然应该是==
(从那时起就会搞砸一切)。
假设这不是问题 - 保持核心数据信息和表格数组同步可能很棘手(很难确切地说出代码中的错误,但[eventList insertObject:event atIndex:0]
看起来很可能是罪魁祸首)。如果您要添加和删除对象,我建议使用NSFetchedResultsController
- 它有自己的一套陷阱,但它使得从商店添加和删除对象的痛苦更小。