0

在 [managedObjectContext deleteObject:device] 之后;仍在设备对象中显示数据。无法从数据库中删除数据。如何删除数据

if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    NSLog(@"After managedObjectContext: %@",  managedObjectContext);
}

NSError *error;

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Reserve" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 


//    NSSortDescriptor tells defines how to sort the fetched results
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"number" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSLog(@"sort count%d",[sortDescriptors count]);


fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];


NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(number = %d)", [sender tag]];

// [fetchRequest setPredicate:predicate];
[fetchedResultsController.fetchRequest setPredicate:predicate];
self.fetchedObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];      
NSLog(@"Count of array::::%d",[fetchedObjects count]);
NSManagedObject *device = [fetchedObjects lastObject];  
NSLog(@"device::::%@",device);

[managedObjectContext deleteObject:device];

 NSLog(@"device::::%@",[fetchedObjects lastObject]);

提前致谢

4

1 回答 1

2

从上下文中删除对象 ( device) 不会导致它从前一个结果集 ( fetchedObjects) 的末尾自动消失。您获取的数组将包含在获取时存在的任何对象。它不会自动更新自身。

您是否尝试在从上下文中删除对象后再次运行获取请求,然后检查设备是否仍出现在结果集中?此外,如果您真的希望该对象保持被删除状态,那么save您的上下文也是一个好主意。

如果需要,您可以向 中添加一个委托,NSFetchedResultsController当结果集更改时,它将回调到您的代码中。然后,您可以使用通知作为重新加载阵列的提示。

于 2012-05-14T12:19:59.947 回答