Ios 使用NSPredicate从NSFetchedResultsController和核心数据筛选UITableView
我有一个Ios 使用NSPredicate从NSFetchedResultsController和核心数据筛选UITableView,ios,objective-c,uitableview,nspredicate,nsfetchrequest,Ios,Objective C,Uitableview,Nspredicate,Nsfetchrequest,我有一个UITableView使用NSFetchedResultsController显示用户列表。 我添加了一个UISegmentedControl,以在我的完整用户列表和仅我的活动用户之间切换 要获取用户列表,我使用fetchedResultsController: - (NSFetchedResultsController *)fetchedResultsController { if (_fetchedResultsController != nil) { ret
UITableView
使用NSFetchedResultsController
显示用户列表。
我添加了一个UISegmentedControl
,以在我的完整用户列表和仅我的活动用户之间切换
要获取用户列表,我使用fetchedResultsController
:
- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:20];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastname" ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];
if (self.barSegmentedControl.selectedSegmentIndex == 1) {
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"active == YES"]];
}
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Master"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _fetchedResultsController;
}
要在单击UISegmentedControl
时执行tableview的更新,我使用segmentedControlIndexChanged
:
-(IBAction) segmentedControlIndexChanged{
self.fetchedResultsController = nil;
[self fetchedResultsController];
[self.tableView reloadData];
}
但我不确定我做得对。
您能告诉我这是否是使用NSFetchedResultsController
筛选UITableView
的正确方法吗
我还想知道是否可以用动画过滤列表?
与iPhone手机应用程序中的“最近通话”选项卡完全相同,它可以从所有通话切换到未接来电
谢谢你的帮助。你的方法会很有效的。我也用同样的东西,没有任何问题 在动画中,您可以使用代理方法执行这些操作
检查此处。代码>self.fetchedResultsController=nil代码>是使属性无效的合理方法 但是你应该删除这个奇怪的
[self-fetchedResultsController]代码>行。
[self.tableView重载数据]
将调用应该访问fetchedResultsController
属性的代理(如果在数据源方法中使用\u fetchedResultsController
变量,这将是一种反模式)
使用动画过滤列表
准备要隐藏和发送的行列表
[self.tableView deleteRowsAtIndexPaths: ... withRowAnimation:...]
不是
重新加载数据
,是不是有些东西不起作用了?您目前如何处理FRC委托方法?