1

我有一个 NSMutableArray,其中包含作为数据的对象,其中包含三个值,即日期、名称和金额。

所以我的数组看起来像这样

date   name   amount
08/12  atest  1000
08/13  btest  200
08/14  ctest  3000
08/15  dtest  4000
08/13  etest  5000

现在我正在使用此代码对数据进行排序

金额

[tableAry sortUsingDescriptors:[NSArray arrayWithObject:
[NSSortDescriptor sortDescriptorWithKey:@"amount" 
ascending:NO selector:@selector(caseInsensitiveCompare:)]]];

但它说我的 200 条记录大于 1000 条记录排序数据是这样的:

5000
4000
3000
200
1000
4

2 回答 2

5

看起来金额存储为NSString值。您可以按照您链接的答案中描述的方式修复它(即通过将数字的字符串表示替换为存储为的数字),或者通过添加到描述符来NSNumber解决它:intValue

[tableAry sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"amount.intValue" ascending:NO]]];
于 2013-08-12T16:38:06.043 回答
1

您将金额作为字符串而不是数字进行比较。按字母排序规则,该200字符串比字符串“更大” 。1000

这是一个经典的“将数字排序为字符串”错误。

您提到的问题的答案正是您如何解决问题。

于 2013-08-12T16:37:25.997 回答