如何使用tableview删除核心数据中的数据

时间:2014-03-12 15:00:46

标签: ios objective-c uitableview core-data

我找不到如何从表视图中删除核心数据实体实例。

这是我使用核心数据信息更新表格视图的方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    Datos * record = [self.fetchedRecordsArray objectAtIndex:indexPath.row];
    cell.textLabel.text = [NSString stringWithFormat:@"%@ ",record.punto];

    UIImage* image = [UIImage imageWithData:record.imagen];
    cell.imageView.image = image;

    return cell; 
}

我试图使用以下函数删除实体实例,但它不起作用:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{  
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}

2 个答案:

答案 0 :(得分:1)

好吧,我不知道你从CoreData获取数据的位置,但你需要调用那种代码片段,删除行时它不会自行删除

- (void) deleteElement:(NSString*)elementId{
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"YourTable" inManagedObjectContext:self.managedObjectContext]];
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"id=%@",elementId]];

    NSError *error=nil;
    NSManagedObject *fetchedElement = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] lastObject];

    [self.managedObjectContext deleteObject:fetchedElement];

    if (![self.managedObjectContext save:&error]) {
        NSLog(@"problem deleting item in coredata : %@",[error localizedDescription]);
    }
}

您的代码应如下所示:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{

     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

     [self deleteElement:idOfElementToDelete];
}

这是错误:

'无效更新:第0节中的行数无效。更新后的现有部分中包含的行数(2)必须等于更新前该部分中包含的行数(2)加上或减去从该部分插入或删除的行数(0插入,1删除)和加或减移入或移出该部分的行数(0移入,0移出)。&#39 ;

答案 1 :(得分:0)

您需要从托管对象上下文中删除实体实例:

NSManagedObjectContext *moc = record.managedObjectContext;
Datos * record = [self.fetchedRecordsArray objectAtIndex:indexPath.row];
[self.fetchedRecordsArray removeObject:record];
[moc deleteObject:record];

NSError *error;

if (![moc save:&error]) {
    NSLog(@"Save error:: %@", error);
}

这是tableView:commitEditingStyle:forRowAtIndexPath:

(假设Datos是您的托管对象的子类)