Iga*_*gal 13 compare objective-c nsmutablearray
我有以下可变数组:
NSMutableArray *persons = [[NSMutableArray alloc]initWithObjects:person1, person2, person3, nil];
Run Code Online (Sandbox Code Playgroud)
其中每个人都是一个对象,其中包含(NSInteger)personAge和(NSString*)personName属性.现在我想通过personAge对这个数组进行排序.所以我尝试了以下方法:
[persons sortUsingComparator:
^NSComparisonResult(id obj1, id obj2)
{
Person *p1 = (Person*)obj1;
Person *p2 = (Person*)obj2;
return [p1.personAge compare: p2.personAge];
}];
NSLog(@"%ld", [persons componentsJoinedByString:@" "]);
Run Code Online (Sandbox Code Playgroud)
但我在返回行中收到"错误的接收器类型'NSInteger'(又名'long')"错误消息.另外我在NSLog行中有一个警告:"Format指定类型'long'但参数的类型为'NSString*'".我如何解决它?
tig*_*ero 37
你不应该使用这样的东西吗?
[persons sortUsingComparator:
^NSComparisonResult(id obj1, id obj2){
Person *p1 = (Person*)obj1;
Person *p2 = (Person*)obj2;
if (p1.personAge > p2.personAge) {
return (NSComparisonResult)NSOrderedDescending;
}
if (p1.personAge < p2.personAge) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}
];
Run Code Online (Sandbox Code Playgroud)
问题是你依赖于compare不存在的方法NSInteger:它只是一个typedef int.因此,您希望比较整数值并返回一个NSComparisonResult值,以相应地表示对象的顺序.
| 归档时间: |
|
| 查看次数: |
16969 次 |
| 最近记录: |