NSFetchedResultsController没有采用内容更改

时间:2015-06-28 20:00:32

标签: ios objective-c core-data

我想弄清楚为什么我的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;

以下是排序完成的属性:

enter image description here

以下是我正在更新所述财产的方式:

entity.lastOpened = [NSDate date];

[entity.managedObjectContext save:nil];

有什么想法吗?这个令我困惑。

修改

我已经做了一些测试,看起来问题是这样的:NSFetchedResultsController只打算对原始的sortDescriptors采取任何措施。如果我在初始化sortDescriptors之后更改了请求的predicateNSFetchedResultsController(我正在调用performFetch:),则会调用我的委托方法,但是fetchedObjects不会诉诸自己。

1 个答案:

答案 0 :(得分:1)

根据评论,如果您在运行中改变获取请求的谓词或排序描述符,FRC似乎会感到困惑。如果你需要改变它们,那么用新的谓词和排序描述符实例化一个全新的FRC。