【发布时间】:2017-03-09 13:23:57
【问题描述】:
我有一个数组(比如 personObjectArray),其中包含 Person 类的对象。
类 Person 有 2 个变量说,
NSString *name, NSString *age.
这里 age 的类型为 nsstring。
现在当我像下面这样排序时,
personObjectArray = [[personObjectArray sortedArrayUsingComparator:^NSComparisonResult(Person *p1, Person *p2){
return [p1.age compare:p2.age];
}] mutableCopy];
是这样的,
1, 11, 123 2、 23, 3... 它排序像字母顺序不考虑它作为一个数字。
所以我像这样更改我的代码,
personObjectArray = [[personObjectArray sortedArrayUsingComparator:^NSComparisonResult(Person *p1, Person *p2){
return [[p1.age intValue] compare:[p2.age intValue] ];
}] mutableCopy];
它说,Bad receiver type 'int'
我现在如何排序? 请不要告诉我在 Person 类中更改 age 的数据类型。我无法改变它。任何帮助表示赞赏(:,感谢您的时间。
【问题讨论】:
-
你试过比较方法而不是使用块吗?
-
那是什么,你能告诉我清楚吗?
-
将其映射为 Int 类型,对其进行排序,然后再次将其映射为 NSString 类型
-
return [p1.age compare:p2.age options:NSNumericSearch];或return [@([p1.age intValue]) compare:@([p2.age intValue]) ]; -
您在原始 (
int) 上使用了compare:,这是您不能做的事情,这就是您收到错误的原因。您必须使用具有compare:方法的NSNumber,而@()是它的简短语法。否则,您需要执行[[NSNumber numberWithInt:[p1.age intValue]] compare:[NSNumber numberWithInt:[p2.age intValue]]]相同的操作。
标签: ios objective-c sorting