Nat*_* R. 9 iphone core-data nsfetchedresultscontroller ios
我有一个NSFetchedResultsController以下列方式启动:
NSEntityDescription *myEntity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:myEntity];
[fetchRequest setFetchBatchSize:10];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"wasDeleted == %@", [NSNumber numberWithBool:NO]]];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor, nil]];
myFetchedResults = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
myFetchedResults.delegate = self;
[myFetchedResults performFetch:nil];
Run Code Online (Sandbox Code Playgroud)
一些事实:
wasDeleted是MyEntity的NSNumber属性(BOOL)
如果我将此属性更新[NSNumber numberWithBool:YES]为NSFetchedResultsControllerDelegate调用didChangeObject但是触发NSFetchedResultsChangeUpdate而不是NSFetchedResultsChangeDelete.
但是,如果我弹出视图并再次启动获取的结果控制器,则该对象不再存在,显示[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"wasDeleted == %@", [NSNumber numberWithBool:NO]]];有效.
在NSFetchedResultsChangeUpdate之后,当调用cellForRow时,我打印wasDeleted并将其设置为YES.
这可能有什么不对?
(换句话说,如果对象仍然存在于上下文中但是不适合谓词,则可以调用NSFetchedResultsChangeDelete?)
小智 1
当然changeUpdate也不是changeDelete。您仅更新了一个值,并未删除整个项目。如果您从数据库中删除该项目,那么它将调用changeDelete. 并且在新的初始化之后不会显示它,因为您的表正在根据此属性进行过滤。
您需要监听NSFetchedResultsChangeUpdate并检查属性是否wasDeleted发生更改。如果是这样,请根据您的需要更新您的表格视图,例如。删除特定行。
| 归档时间: |
|
| 查看次数: |
1387 次 |
| 最近记录: |