サードパーティからの ID でいっぱいのフィールドがあります。ID は数値ですが、DB には文字列として書き込まれます。
整数の値で、この 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 分 EST
比較ブロックが使用されているかどうかをテストするために、フィールドの長さに基づいて次のように並べ替えを試みました。
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