从fetchedresultsController中删除错误索引处没有任何部分

时间:2013-07-24 20:21:36

标签: iphone ios uitableview core-data nsfetchedresultscontroller

我一直试图解决这个问题一段时间,并没有得到任何结果。我会喜欢一些帮助 我使用一个带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];
    }
}

1 个答案:

答案 0 :(得分:1)

如果我理解你的所有提取控制器,你就是:

在此处删除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控制器委托设置。

编辑:

在-begin和-end调用中包装删除调用:

[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];