Iphone 动态更改FetchedResultsController的sortDescriptor。思想?

Iphone 动态更改FetchedResultsController的sortDescriptor。思想?,iphone,objective-c,core-data,Iphone,Objective C,Core Data,我很难理解如何用新的排序更新我的fetchedresultscontroller。我在类中以标准方式初始化frc。但是如何使用新的sortdecription修改fetchrequest呢?我的应用在应用设置中有一个排序选择器,用户可以随时更改。是否有办法动态更新frc?下面的代码是我在viewWillLoad回调中的代码,但它只生成一个空白表。谢谢 [self appSettingSortOrder]; if (sortOrderChanged) { //Form a ne

我很难理解如何用新的排序更新我的fetchedresultscontroller。我在类中以标准方式初始化frc。但是如何使用新的sortdecription修改fetchrequest呢?我的应用在应用设置中有一个排序选择器,用户可以随时更改。是否有办法动态更新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];      
}

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

这个代码的直接问题是,当您创建一个新的获取请求时,您从未将其分配给FRC

这并不重要,因为您不能动态更改FRC的获取请求。
NSFetchedResultsController
文档明确了这一点

重要提示:您不能修改 获取请求。例如,你必须 不更改其谓词或排序 订单


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

我也读过。因此,我似乎需要创建一个具有新排序顺序的新FRC,并将其委托给具有回调的类,即self。将当前FRC指定为零可能是明智的做法。是/否?