gpt4 book ai didi

ios - 重新加载 fetchedResultsController 数据

转载 作者:行者123 更新时间:2023-11-29 00:37:04 32 4
gpt4 key购买 nike

我有由获取结果 Controller 管理的 TableView 。我想要的是,当用户点击分段控件时更改排序顺序。这就是我创建获取结果 Controller 的方式:

- (NSFetchedResultsController *)frc {

if (_frc != nil) {
return _frc;
}

NSString *sortCase;
switch (self.sortOrder) {
case tableSortServer:
sortCase = [NSString stringWithFormat:@"%@", CD_SORT];
break;

case tableSortDate:
sortCase = [NSString stringWithFormat:@"%@", CD_DATE];
break;

default:
sortCase = [NSString stringWithFormat:@"%@", CD_SORT];
break;
}


NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:CD_ENTITY_NAME inManagedObjectContext:self.getManagedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:sortCase ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

[fetchRequest setFetchBatchSize:BATCH_SIZE];

NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.getManagedObjectContext sectionNameKeyPath:nil
cacheName:@"Root"];
self.frc = theFetchedResultsController;
_frc.delegate = self;

return _frc;

}

在分段 Controller 回调方法中我做了:

- (IBAction)sortOrderChanged:(id)sender {

UISegmentedControl *sc = sender;
if (sc.selectedSegmentIndex == 0){
self.sortOrder = tableSortServer;
[self.tableView reloadData];
} else {
self.sortOrder = tableSortDate;
[self.tableView reloadData];
}

}

但是,它不起作用。如何完成这个任务呢? (以不同的排序顺序重新加载表)?

最佳答案

也许这是因为

if (_frc != nil) {
return _frc;
}

您重新加载表格。它使用旧的获取结果 Controller 。因此,您的 self.sortOrder = tableSortServer 不会被考虑在内。我认为您每次重新加载 TableView 之前都需要设置新的排序描述符(并实际执行获取)

关于ios - 重新加载 fetchedResultsController 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40359421/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com