我想弄清楚为什么我的NSFetchedResultsController
实例在内容发生变化时似乎忽略了它sortDescriptor
。调用所有委托方法等,但是当我正在排序的相关属性发生更改时,我只会收到NSFetchedResultsChangeUpdate
更改通知,并且没有使用内容:
以下是我创建NSFetchedResultsController
实例的方法:
NSManagedObjectContext *context = [UIApplication managedObjectContext];
_fetchRequest = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([MCCDBook class])];
_fetchRequest.sortDescriptors = @[
[NSSortDescriptor sortDescriptorWithKey:@"lastOpened" ascending:true selector:@selector(compare:)]
];
_fetchRequest.entity = [NSEntityDescription entityForName:_fetchRequest.entityName inManagedObjectContext:context];
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:_fetchRequest managedObjectContext:context sectionNameKeyPath:@"sectionTitle" cacheName:nil];
_fetchedResultsController.delegate = self;
以下是排序完成的属性:
以下是我正在更新所述财产的方式:
entity.lastOpened = [NSDate date];
[entity.managedObjectContext save:nil];
有什么想法吗?这个令我困惑。
修改
我已经做了一些测试,看起来问题是这样的:NSFetchedResultsController
只打算对原始的sortDescriptors
采取任何措施。如果我在初始化sortDescriptors
之后更改了请求的predicate
或NSFetchedResultsController
(我正在调用performFetch:
),则会调用我的委托方法,但是fetchedObjects
不会诉诸自己。
答案 0 :(得分:1)
根据评论,如果您在运行中改变获取请求的谓词或排序描述符,FRC似乎会感到困惑。如果你需要改变它们,那么用新的谓词和排序描述符实例化一个全新的FRC。