0

我正在尝试对我的数组进行排序,但它似乎无法可靠地工作。

这是排序的代码。基本上 Request priorityID 的值是 1-5 例如: 在此处输入图像描述

 sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
            NSLog(@"Value A: %@", [NSNumber numberWithInteger:[(Request*)a priorityID]]);
            NSLog(@"Value B %@", [NSNumber numberWithInteger:[(Request*)b priorityID]]);
            NSNumber *first = [NSNumber numberWithInt:[(Request*)a priorityID]];
            NSNumber *second = [NSNumber numberWithInt:[(Request*)b priorityID]];
            return [first compare:second];
        }];

        self.sortedReqArray = [NSMutableArray arrayWithArray:sortedArray];

有时它正确排序 1-5,但有时它排序 1 2 4 5 3...

然后,当我查看 NSLog 时,它会吐出非常大的值,而它们应该只是 1-5。

这是示例输出 Value B 168492640 Value A: 168492640 Value B 168492640 Value A: 174580912 Value B 168492640 Value A: 174580912 Value B 168492640 Value A: 174580912 Value B 168492640 Value A: 174580912 Value B 168492640 Value A: 174580912

怎么了?谢谢!

4

1 回答 1

3

从调试器显示[(Request*)a priorityID]似乎是 a NSNumber,但您将其视为整数(因此您实际上是在比较对象的地址)。

以下应该工作:

sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
            NSNumber *first = [(Request*)a priorityID];
            NSNumber *second = [(Request*)b priorityID];
            return [first compare:second];
        }];

一种可能更优雅的写法是

sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(Request* a, Request* b) {
            NSNumber *first = [a priorityID];
            NSNumber *second = [b priorityID];
            return [first compare:second];
        }];

如果Request该类与 key 的 Key-Value Coding 兼容priorityID,则以下内容也应该起作用:

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"priorityID" ascending:YES];
sortedArray = [self.selectedReqArray sortedArrayUsingDescriptors:@[sort]];
于 2013-05-15T14:59:40.863 回答