【发布时间】:2011-06-22 17:08:25
【问题描述】:
我在第二个线程上成功添加和更新核心数据中的记录,没有问题。
但是,在我停止并重新启动应用程序之前,删除似乎不会生效。所以删除显然在一定程度上起作用。我在加载 tableview 之前读取了数据,并且在删除时没有做任何不同的事情。
我使用的代码是
....fetch records....
BOOL deleteGem = FALSE;
if ([[attributeDict objectForKey:@"headline"] hasPrefix:@"VOID"])
deleteGem = TRUE;
if ([mutableFetchResults count] == 0) {
// not there so create a new one
if (!deleteGem) {
// so create a new one unless it needs deleting
gem = (Gem *)[NSEntityDescription insertNewObjectForEntityForName:@"Gem" inManagedObjectContext:managedObjectContext];
[gem setID:[attributeDict objectForKey:@"ID"]];
}
} else {
// already exists so either get it and then update or delete it
gem = [mutableFetchResults objectAtIndex:0];
if (deleteGem) {
// delete it if required
[managedObjectContext deleteObject:gem];
gemDeletes ++;
}
}
.....
稍后我有一种方法可以保存任何更新,包括:
NSError *error;
if (![self.managedObjectContext save:&error]) {
....
热烈欢迎任何想法...
编辑 - 根据@TechZen 的回答提供完整答案..
在 viewDidLoad 的第二个线程上注册更新通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleSaveNotification:) name:NSManagedObjectContextDidSaveNotification object:nil];
在 viewDidUnload 中取消注册通知
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextDidSaveNotification object:nil];
在主线程中处理更新(视图控制器中的新方法)
-(void)handleSaveNotification:(NSNotification *)aNotification {
[managedObjectContext mergeChangesFromContextDidSaveNotification:aNotification];
}
【问题讨论】:
-
好吧,把我弄糊涂了。您是直接从 coreData 显示 tableView 中的数据还是将其缓冲在 NSArray/NSDictionary 中?如果您正在缓冲,您是否从 NSArray/NSDictionary 中删除该项目?
-
不,我在一个数组中缓冲,但我刷新了这个,它适用于插入和更新。