使用sortUsingComparator对NSMutableArray中的对象进行排序

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值,以相应地表示对象的顺序.