我找不到如何从表视图中删除核心数据实体实例。
这是我使用核心数据信息更新表格视图的方法:
- (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];
}
答案 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
是您的托管对象的子类)