核心数据删除不起作用

时间:2011-03-08 09:36:31

标签: iphone objective-c core-data

我使用以下代码填充UITableView

self.navigationItem.leftBarButtonItem = self.editButtonItem;

test_coredataAppDelegate *appDelegate = (test_coredataAppDelegate *)[[UIApplication sharedApplication] delegate];
self._context = appDelegate.managedObjectContext;


NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription 
                               entityForName:@"patients" inManagedObjectContext:_context];
[fetchRequest setEntity:entity];
NSError *error;
self.PatientsList = [_context executeFetchRequest:fetchRequest error:&error];
self.title = @"patients"; 
[fetchRequest release];

其中PatientsList是NSArray

当我想删除记录时我使用

[self._context  deleteObject:[_PatientsList objectAtIndex:indexPath.row]];

    NSError *error; 

    if (![_context save:&error]) {
        // Handle error
        NSLog(@"Unresolved error series %@, %@", error, [error userInfo]);

    }

    [PatientsList removeObjectAtIndex:indexPath.row] ; 


    [self.tableView reloadData];

但这没有任何效果。

如何解决此问题并成功删除,尤其是当我的模型包含关系时?

2 个答案:

答案 0 :(得分:1)

这里你从db中删除它,但不是从数组中删除它,所以你需要从数组中删除或调用数据库,以便再次使用新的db详细信息加载arry。

所以对于第一种方法,从数组中删除它会使你的数组​​变得可变并使用 removeObjectAtIndex删除对象的方法

或者在第二种方法中,您需要从核心数据中再次获取数据。

然后使用

重新加载表
[table reloadData];

答案 1 :(得分:0)

您是否可以在致电deleteObject:之前和之后发布有关您从获取请求中获得的结果的更多信息?您还可以检查传递给某些Core Data函数的 NSError 对象的userInfo属性,因为这通常会在Core Data中提供非常有用的帮助信息。还要记住,在使用 NSManagedObjectContext 实例的save:方法保存数据模型之前,您的修改不会“一成不变”。

Core Data处理已删除对象关系的方式在Core Data架构(.xcdata文件)中定义,您可以在Xcode中进行编辑。您可以在此处将关系的删除操作设置为“拒绝”,“无效”,“级联”或“无操作”。请参阅documentation found here的“关系删除规则”部分。