我有一个当前按日期排序的 UITableViewController。我将 Core Data
与 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
现在正在对日期进行排序。 sectionTitles
是从 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]];
到:
fetchRequest.sortDescriptors = @[sort, sortByName];
关于ios - 使用 NSSortDescriptor、Core Data 和 NSFetchedResultsController 按日期和名称对 UITableView 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23023848/