【发布时间】:2012-04-30 21:34:27
【问题描述】:
我有一个充满第三方 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
【问题讨论】:
-
numFormatter 返回什么?诠释?字符串?
-
NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init]; [numFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
-
您是否尝试在比较器块本身中设置断点以查看它是否被调用?如果它被调用,那么你可以确定它是错误的块代码。
-
啊,我之前从那里尝试过 NSLogging,只是尝试放入断点。不去,它不会被调用。