0

我一直试图弄清楚这一点,但没有得到任何地方。我很想得到一些帮助。
我使用带有 2 次提取的表。只能编辑表格最后一部分中的 1。当我删除一个项目时,应用程序崩溃说索引中没有部分。我已经阅读了对其他类似问题的一些回复,但仍然无法解决。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [[fetchedResultsController sections] count]+1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (section < fetchedResultsController.sections.count) {
        return [[fetchedResultsController.sections objectAtIndex:section]     numberOfObjects];
    }
    else {
        return fetchedResultsControllerCustomWOD.fetchedObjects.count;
    }
}

对于 commitEditing 方法:

- (void)tableView:(UITableView *)tableView commitEditingStyle:    
(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSManagedObjectContext *context = [self managedObjectContext];
    if (editingStyle == UITableViewCellEditingStyleDelete) {

        // Delete object from database
        [context deleteObject:[[fetchedResultsControllerCustomFR     objectAtIndexPath:indexPath] objectAtIndex:indexPath.row]];

        NSError *error = nil;
        if (![context save:&error]) {
            NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]);
            return;
        }

        // Remove device from table view
        [[fetchedResultsControllerCustomFR objectAtIndexPath:indexPath]     removeObjectAtIndex:indexPath.row];
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]     withRowAnimation:UITableViewRowAnimationFade];
    }
}
4

1 回答 1

1

如果我正确理解您所有的 fetch 控制器,您是:

在此处从 CoreData 中删除对象一次:

 // Delete object from database
        [context deleteObject:[[fetchedResultsControllerCustomFR     objectAtIndexPath:indexPath] objectAtIndex:indexPath.row]];

然后保存上下文:

NSError *error = nil;
if (![context save:&error]) {
    NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]);
    return;
}

这反过来会提醒fetchedResultsControllerCustomFR项目已被删除。

然后您尝试再次从中删除fetchedResultsControllerCustomFR

// Remove device from table view
        [[fetchedResultsControllerCustomFR objectAtIndexPath:indexPath]     removeObjectAtIndex:indexPath.row];

它应该已经知道它已经消失了。鉴于您已经设置了 fetch 控制器代表。

编辑:

将 delete 调用包装在 -begin 和 -end 调用中:

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];
于 2013-07-24T23:26:43.240 回答