虽然这不是一个错误/错误,但它会作为一个例外。当我尝试使用核心数据删除或插入对象时,第一次插入或删除会显示以下错误:
2012-04-09 18:57:32.201 SEA [7437:fb03] * 断言失败 - [UITableView _endCellAnimationsWithContext:],/ SourceCache / UIKit_Sim / UIKit-1912.3 / UITableView.m: 1046 2012-04-09 18:57:32.203 SEA [7437:fb03] CoreData:错误:严重的应用程序错误。在调用-controllerDidChangeContent:期间,从NSFetchedResultsController的委托中捕获到异常。无效更新:第0节中的行数无效。更新(5)后现有部分中包含的行数必须等于更新前该部分中包含的行数(5),加上或减去数字从该部分插入或删除的行(插入1个,删除0个)并加上或减去移入或移出该部分的行数(0移入,0移出)。 with userInfo(null)
我有点不确定为什么会出现这个问题,因为实际的tableView会显示新行或已删除的行。数据库还显示正确的值和所有内容。 我正在使用的代码如下:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [[fetchedResultsController sections] count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[[fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
}
如果您需要查看更多代码,请告诉我们。
在显示所有用户的tableViewController中。我有以下内容:
(void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView beginUpdates];
}
(void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView endUpdates];
}
这是commitEditingStyle的代码
(void)tableView:(UITableView *)tableView commitEditingStyle: (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
// Get context and user to delete
NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
User *userToDelete = [fetchedResultsController objectAtIndexPath:indexPath];
// Delete user from context
[context deleteObject:userToDelete];
// Save!
NSError *error = nil;
if(![context save:&error]){
// Handle the error..
}
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}