动态更改FetchedResultsController的sortDescriptor。想法?

时间:2010-09-15 11:05:30

标签: iphone objective-c core-data

我很难理解如何使用新排序更新我的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];      
}

2 个答案:

答案 0 :(得分:2)

嗯,这段代码的当前问题是,当你创建一个新的获取请求时,你永远不会将它分配给FRC。

无关紧要,因为您无法动态更改FRC的获取请求。 NSFetchedResultsController文档明确说明了这一点。

  

重要提示:您不得修改   获取请求。例如,你必须   不改变它的谓词或种类   排序

要更改FRC的排序顺序,必须使用新的排序创建带有新的获取请求的新FRC。

答案 1 :(得分:0)

我怀疑sortOrderChanged的值是false。没有执行提取。在if块上设置断点以确保它正在进入。