2010-09-15 35 views
0

我很难理解如何使用新排序更新我的fetchedresults控制器。我在我的班级中初始化一个frc的标准方式。但是,如何用新的sortdecription修改fetchrequest?我的应用在appSettings中有一个排序选择器,用户可以随时更改。有没有办法更新frc动态?下面的代码是我在viewWillLoad回调中的,但它只是产生一个空白表。谢谢!动态更改FetchedResultsController的sortDescriptor。想法?

[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

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

2

那么,这个代码的直接问题是,当你创建一个新的获取请求时,你永远不会把它分配给FRC。

这并不重要,因为您无法即时更改FRC的提取请求。 NSFetchedResultsController文档使这个明确。

重要提示:您不得修改 提取请求。例如,您必须 不会更改其谓词或排序 排序。

要更改FRC的排序顺序,您必须创建一个具有新排序的新提取请求的新FRC。

+0

我也读过。所以看起来我需要用新的排序顺序创建一个新的FRC,并将其委派给具有回调的类,即self。可能谨慎地将当前的FRC分配给零。是/否? – Hal 2010-09-16 01:13:19