Ani*_*ese 9 nssortdescriptor nsfetchedresultscontroller ios
在fetchedResultsController设置NSSortDescriptoriam时,获得此错误的NSSortDescriptor不受支持(不支持比较器块).
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Alarm" inManagedObjectContext: managedObjectContext];
[fetchRequest setEntity:entity];
//Below code is not working and causing error. sorting use the hours&seconds part of the time attribute
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"time" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components1 = [calendar components:(NSHourCalendarUnit|NSMinuteCalendarUnit) fromDate:obj1];
NSDateComponents *components2 = [calendar components:(NSHourCalendarUnit|NSMinuteCalendarUnit) fromDate:obj2];
NSDate *date1 = [calendar dateFromComponents:components1];
NSDate *date2 = [calendar dateFromComponents:components2];
return [date1 compare:date2];
}];
Run Code Online (Sandbox Code Playgroud)
您不能在任何地方使用带有比较器块的排序描述符 - 例如,不能使用Core Data提取.
但是,当您过滤普通数组时,它们可以正常工作.
除此之外 - 那里有一个我忽略的问题吗?
正如 Monolo 所说,您不能将比较器块与 Core Data 一起使用。但是,您可以使用:
[NSSortDescriptor sortDescriptorWithKey:(NSString *) ascending:(BOOL) selector:(SEL)]
Run Code Online (Sandbox Code Playgroud)
如果您不使用标准选择器,则需要扩展您的模型。
例如,我只需要对字符串“a la Finder”(即 1,2,9,10,而不是 1,10,2,9)进行排序,然后我使用了
request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:myEntity ascending:NO selector:@selector(localizedStandardCompare:)]];
Run Code Online (Sandbox Code Playgroud)
快乐编码:)
| 归档时间: |
|
| 查看次数: |
5630 次 |
| 最近记录: |