我正在创建一个核心数据示例,其中我想删除托管对象(此处称为项目)。删除管理对象似乎可行,但刷新 tableView 是个问题。以下是我在调用应用程序崩溃时收到的日志消息tableView: numberOfRowsInSection:
。
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:第 0 节中的行数无效。更新后现有节中包含的行数 (13) 必须等于该节中包含的行数更新前的节 (13),加上或减去从该节插入或删除的行数(0 插入,1 删除),加上或减去移入或移出该节的行数(0 移入,0 移动出去)。'
这里删除前的行数为 14,删除后的行数为 13。请参阅我用于 A 的方法。获取行数,这应该等于核心数据中的“项目”数。B. 删除项目。C.设置tableView的行数。
一种。
-(void) setupFetchResultsController {
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Project"];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSError *error;
fetchedProjects = [managedObjectContext executeFetchRequest:request error:&error];
if (fetchedProjects == nil) {
// Handle the error.
}
self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:request managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
}
B.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
selectedProject = [self.fetchedResultsController objectAtIndexPath:indexPath];
[managedObjectContext deleteObject:selectedProject];
//setting up the fetch results controlleris intended to get the number rows correctly by fetching the existant projects. In the above log, the result would be 14 (not 13) without this line. Crashes with or without this line.
[self setupFetchResultsController];
if (editingStyle == UITableViewCellEditingStyleDelete) {
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
C。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
int noOfRows = [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
return noOfRows;
}