我有一个充满第三方 id 的字段。id 是数字,但作为字符串写入数据库。
我想对按此 id 排序的整数值进行排序。所以我将这个添加NSSortDescriptor
到NSFetchRequest
.
NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init];
[numFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSSortDescriptor *sortBy = [[NSSortDescriptor alloc] initWithKey:@"someId" ascending:YES comparator:^(id a, id b) {
return [[numFormatter numberFromString:a] compare:[numFormatter numberFromString:b]];
}];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortBy]];
但我得到如下结果。这些仍然按字母顺序排序为字符串。
730275292
73900038
730172867
7350727
830138437
835164
837287901
8338804
930274
9324376
我对使用这个比较器块有什么不明白的地方?
编辑 2012 年 5 月 1 日美国东部标准时间上午 9:20
为了测试是否正在使用比较器块,我尝试了以下根据字段长度进行排序。
NSSortDescriptor *sortBy = [[NSSortDescriptor alloc] initWithKey:@"fbId" ascending:YES comparator:^(id a, id b) {
if ([a length] < [b length]) {
return NSOrderedAscending;
} else if ([a length] > [b length]) {
return NSOrderedDescending;
} else {
return NSOrderedSame;
}
}];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortBy]];
我仍然得到按字母顺序排序的结果!所以这让我觉得比较器块甚至没有被使用。
716164250
726354466
73900038
739600038
7450727
810138437
801164
801375346
8213997