我很难理解如何使用新排序更新我的fetchedresultscontroller。我在课堂上以标准方式初始化了一个frc。但是你究竟如何使用新的sortdecription修改fetchrequest呢?我的应用在appSettings中有一个排序选择器,用户可以随时更改。有没有办法动态更新frc?下面的代码是我在viewWillLoad回调中的代码,但它只生成一个空白表。谢谢!
[self appSettingSortOrder];
if (sortOrderChanged) {
//Form a new fetchrequest for the FRC and reload the table.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Aircraft" inManagedObjectContext:managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:currentSortOrder ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSError *error = nil;
[fetchedResultsController performFetch:&error];
[self.tableView reloadData];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
}
答案 0 :(得分:2)
嗯,这段代码的当前问题是,当你创建一个新的获取请求时,你永远不会将它分配给FRC。
无关紧要,因为您无法动态更改FRC的获取请求。 NSFetchedResultsController
文档明确说明了这一点。
重要提示:您不得修改 获取请求。例如,你必须 不改变它的谓词或种类 排序
要更改FRC的排序顺序,必须使用新的排序创建带有新的获取请求的新FRC。
答案 1 :(得分:0)
我怀疑sortOrderChanged的值是false。没有执行提取。在if块上设置断点以确保它正在进入。