我有一个 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];
一些事实:
wasDeleted 是 MyEntity 的 NSNumber 属性 (BOOL)
如果我将此属性更新为[NSNumber numberWithBool:YES]
NSFetchedResultsControllerDelegate 调用 didChangeObject 但触发NSFetchedResultsChangeUpdate代替NSFetchedResultsChangeDelete.
但是,如果我弹出视图并再次初始化获取的结果控制器,则该对象不再存在,表明[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"wasDeleted == %@", [NSNumber numberWithBool:NO]]];
works.
在此 NSFetchedResultsChangeUpdate 之后,当调用 cellForRow 时,我打印 wasDeleted 并将其设置为 YES。
这里可能出了什么问题?
(换句话说,如果对象仍然存在于上下文中但不符合谓词,则可以调用 NSFetchedResultsChangeDelete 吗?)
当然changeUpdate
并不是changeDelete
。您仅更新了一个值,并未删除整个项目。如果您从数据库中删除该项目,那么它将调用changeDelete
。并且在新的初始化之后不会显示它,因为您的表正在根据此属性进行过滤。
你需要聆听NSFetchedResultsChangeUpdate
并检查属性是否存在wasDeleted
被改变了。如果是这样,请根据您的需要更新您的表格视图,例如。删除特定行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)