我有一个由NSFetchedResultsController支持的表视图。
只要底层上下文中的对象发生更改,NSFetchedResultsController就会自动在表视图上反映新的属性值。耶。
我注意到的一个例外是对sectionNameKeyPath使用的属性值的更新不会自动反映。
我猜测用于sectionNameKeyPath的属性值对NSFetchedResultsController是如此基础,以至于我需要执行获取& amp;再次重新加载表视图?
更新:下面是用于配置获取请求的代码
- (void)configureFetch {
CoreDataHelper *cdh = [(AppDelegate *)[[UIApplication sharedApplication] delegate] cdh];
NSFetchRequest *request =
[NSFetchRequest fetchRequestWithEntityName:@"Item"];
request.sortDescriptors =
[NSArray arrayWithObjects:
[NSSortDescriptor sortDescriptorWithKey:@"locationAtHome.storedIn"
ascending:YES],
[NSSortDescriptor sortDescriptorWithKey:@"name"
ascending:YES],
nil];
[request setFetchBatchSize:15];
self.frc =
[[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:cdh.context
sectionNameKeyPath:@"locationAtHome.storedIn"
cacheName:nil];
self.frc.delegate = self;
}
以及执行获取的代码:
- (void)performFetch {
if (self.frc) {
[self.frc.managedObjectContext performBlockAndWait:^{
NSError *error;
[self.frc performFetch:&error];
if (error) NSLog(@"%@ '%@' %@ (Reason: %@)",
self.class, NSStringFromSelector(_cmd),
error.localizedDescription, error.localizedFailureReason);
[self.tableView reloadData];
}];
}
}
答案 0 :(得分:1)
问题不在于用作sectionNameKeyPath
的属性已更改,而是相关对象中的属性已更改。
获取的结果控制器仅跟踪对已获取对象本身的更改(在您的情况下为 Item 对象),但不跟踪相关对象。
唯一的解决方案(据我所知)是将该部分作为附加属性添加到 Item 实体,即使这意味着您有重复的数据。