当我尝试从表格View中删除一行时,我遇到了tableView
崩溃的问题。正确地在数据库中进行更改时,将正确调用该方法。我收到的错误是:
无效更新:第0部分中的行数无效。
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [delegate managedObjectContext];
NSManagedObject *objectToDelete = [fixedArray objectAtIndex:indexPath.row];
[context deleteObject:objectToDelete];
[delegate saveContext];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
fixedArray = ([self mondayData]); // this is fetching the data for the array that I supply to the table view
[self.tableView numberOfRowsInSection:[fixedArray count]];
[self.tableView reloadData];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [fixedArray count];
}
答案 0 :(得分:0)
您的- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
方法可能无法返回适当的行数。它应该返回先前的行数减去刚刚删除的行数。
此外,如果该部分中没有其他行,则必须从UITableView中删除该部分。
答案 1 :(得分:0)
您需要包含
[tableView beginUpdates];
和
[tableView endUpdates];
你的代码中的。删除或插入行时,这两种方法可以防止UITableView
崩溃。
在删除tableView的行之前放置beginUpdates
,然后在完成所有操作后放置endUpdates
。
答案 2 :(得分:0)
[tableView beginUpdates];
if (editingStyle == UITableViewCellEditingStyleDelete) {
AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObject *object = [fixedArray objectAtIndex:indexPath.row];
[object setValue:@"No" forKey:@"selected"]; // this works and persists into the database
[delegate saveContext];
fixedArray = ([self mondayData]);
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES];
}
[tableView endUpdates];
[self.tableView reloadData];
这最终对我有用。