Ios 使用NSSortDescriptor、核心数据和NSFetchedResultsController按日期和名称对UITableView进行排序
我有一个UITableViewController,当前正在按日期排序。我将Ios 使用NSSortDescriptor、核心数据和NSFetchedResultsController按日期和名称对UITableView进行排序,ios,core-data,uitableview,nsfetchedresultscontroller,unrecognized-selector,Ios,Core Data,Uitableview,Nsfetchedresultscontroller,Unrecognized Selector,我有一个UITableViewController,当前正在按日期排序。我将核心数据与NSFetchedResultsController一起使用,我还想引入一种按名称进行的进一步排序 我的模型是: 交易实体 与日期实体的关系 人与实体的关系 我的fetchedResultsController代码如下: - (NSFetchedResultsController *)fetchedResultsController { NSManagedObjectContext *managedOb
核心数据
与NSFetchedResultsController
一起使用,我还想引入一种按名称进行的进一步排序
我的模型是:
交易实体
与日期实体的关系
人与实体的关系
我的fetchedResultsController
代码如下:
- (NSFetchedResultsController *)fetchedResultsController
{
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
if (_fetchedResultsController != nil)
{
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Transaction" inManagedObjectContext:managedObjectContext];
fetchRequest.entity = entity;
if ([self.timelineSearchBar.text length] > 0) {
NSPredicate *predName = [NSPredicate predicateWithFormat:@"whoBy.name CONTAINS[c] %@", self.timelineSearchBar.text];
NSPredicate *predOccasion = [NSPredicate predicateWithFormat:@"occasion.title CONTAINS[c] %@", self.timelineSearchBar.text];
NSPredicate *predSubOccasion = [NSPredicate predicateWithFormat:@"subevent.title CONTAINS[c] %@", self.timelineSearchBar.text];
NSPredicate *compPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predName, predOccasion, predSubOccasion]];
[fetchRequest setPredicate:compPredicate];
}
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"dates.dateOfEvent" ascending:NO];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:sort];
fetchRequest.fetchBatchSize = 20;
NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"sectionDateFormatter" cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
因此,sortDescriptor
现在正在对日期进行排序。部分标题
是从NSDate到NSString的转换
我尝试使用以下代码添加另一个sortDescriptor
:
NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"whoBy.name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
fetchRequest.sortDescriptors = @[[NSArray arrayWithObjects:sort, sortByName, nil]];
应用程序因以下错误而崩溃:
-[__NSArrayI key]: unrecognized selector sent to instance 0x1702237c0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI key]: unrecognized selector sent to instance 0x1702237c0'
我想要实现的就是确保按日期排序的条目也按名称排序
任何指导都将不胜感激 您正在设置排序描述符的数组。修正这一行:
fetchRequest.sortDescriptors = @[[NSArray arrayWithObjects:sort, sortByName, nil]];
致:
非常感谢@thom_ek-这真是太完美了-很好的捕获,谢谢你的帮助-很抱歉问了这个基本问题!
fetchRequest.sortDescriptors = @[sort, sortByName];