在iPhone上获取Tableview的核心数据 - 在向列表中添加项目时,教程会让我崩溃

时间:2010-04-23 23:10:02

标签: iphone core-data nsmutablearray nsarray

一直关注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]

来调用行数

1 个答案:

答案 0 :(得分:1)

嗯,if (mutableFetchResults = nil)有一个拼写错误 - 当然应该是==(从那时起就会搞砸一切)。

假设这不是问题 - 保持核心数据信息和表格数组同步可能很棘手(很难确切地说出代码中的错误,但[eventList insertObject:event atIndex:0]看起来很可能是罪魁祸首)。如果您要添加和删除对象,我建议使用NSFetchedResultsController - 它有自己的一套陷阱,但它使得从商店添加和删除对象的痛苦更小。