Tôi có một trường có đầy đủ các id từ một bên thứ ba. Các id là các số nhưng được ghi vào db dưới dạng một chuỗi.NSSortDescriptor sắp xếp một trường chuỗi dưới dạng một số với khối so sánh không hoạt động
Tôi muốn sắp xếp tìm nạp được sắp xếp theo id này trên giá trị của số nguyên. Vì vậy, tôi đang thêm NSSortDescriptor
này vào số 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]];
Nhưng tôi nhận được kết quả như sau. Chúng vẫn được sắp xếp dưới dạng một chuỗi, theo thứ tự bảng chữ cái.
730275292
73900038
730172867
7350727
830138437
835164
837287901
8338804
930274
9324376
Tôi không hiểu gì về việc sử dụng khối so sánh này?
EDIT 01 tháng 5 2012 09:20 EST
Để kiểm tra xem khối so sánh đang được sử dụng, tôi đã thử sau để phân loại dựa vào độ dài của lĩnh vực này.
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]];
Tôi vẫn nhận được kết quả được sắp xếp theo thứ tự bảng chữ cái! Vì vậy, điều này làm cho tôi nghĩ rằng khối so sánh thậm chí không được sử dụng.
716164250
726354466
73900038
739600038
7450727
810138437
801164
801375346
8213997
numFormatter trả về gì? Int? Chuỗi? –
NSNumberFormatter * numFormatter = [[Cấp phát NSNumberFormatter] init]; [numFormatter setNumberStyle: NSNumberFormatterDecimalStyle]; –
Bạn đã thử thiết lập một điểm ngắt trong khối so sánh để xem nó có đang được gọi không? Nếu nó được gọi thì bạn có thể chắc chắn đó là mã khối sai. –