NSSortDescriptor与数字作为stringsorting?

有一个数组完整的字典喜欢这个:

( { order = "10"; name = "David" }; { order = "30"; name = "Jake"; }; { order = "200"; name = "Michael"; }; ) 

当我使用NSSortDescriptor像下面的代码它只sorting关于第一个字符,所以200是低于30我当然可以改变“订单”对象到NSNumber而不是string,它会工作。 但有没有办法将一个stringsorting为int值而不改变源对象?

 NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"norder" ascending:YES]; [departmentList sortUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]]; 

更新:

感谢bandejapaisa。

这里是iOS 5的工作版本(Xcode在compalining)。

 NSArray *sortedArray; sortedArray = [departmentList sortedArrayUsingComparator:(NSComparator)^(id a, id b) { NSNumber *num1 = [NSNumber numberWithInt:[[a objectForKey:@"norder"] intValue]]; NSNumber *num2 = [NSNumber numberWithInt:[[b objectForKey:@"norder"] intValue]]; return [num1 compare:num2]; }]; departmentList = [sortedArray mutableCopy]; 

也许sorting使用比较器,或其他sorting方法之一:

 NSArray *sortedArray = [someArray sortedArrayUsingComparator:^(id obj1, id obj2) { NSNumber *num1 = [NSNumber numberWithInt:[obj1 intValue]]; NSNumber *num2 = [NSNumber numberWithInt:[obj2 intValue]]; return (NSComparisonResult)[rank1 compare:num2]; }]; 

使用NSNumber是矫枉过正。 您可以通过执行以下操作节省大量开销:

 NSArray *sortedArray = [someArray sortedArrayUsingComparator:^(id obj1, id obj2) { return (NSComparisonResult) [obj1 intValue] - [obj2 intValue]; }]; 

以上所有的方法都需要基础知识才能实现,但对于新手来说,我build议最简单的方法是使用本地块方法,希望这有助于

 NSArray* sortedArr =[fetchResults sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { int aValue = [[a valueForKey:@"subgroupId"] intValue]; int bValue = [[b valueForKey:@"subgroupId"] intValue]; return aValue>bValue; }]; 

快乐编码