【问题标题】:Sorting Number using NSSortDescriptor使用 NSSortDescriptor 对数字进行排序
【发布时间】:2012-12-02 04:38:33
【问题描述】:

我又陷入了另一个问题,但过了很长时间。

这次我有一个数据库(核心数据),其属性为numbers,其中包含整数,如 213879,123,4,345,56567 等。

我需要按类似于alphabetically 顺序的升序获取数据。

我正在按照下面给出的方式这样做,

fetchRequest.sortDescriptors=[NSArray arrayWithObject:
      [NSSortDescriptor sortDescriptorWithKey:@"numbers" 
                                    ascending:YES 
                                     selector:@selector(compare:)]];

但不幸的是,它只比较每个数字的第一个数字,这意味着如果有两个数字,如 123321,它将比较 1 (first digit of first number)3 (first digit of second number) 并对它们进行排序。

当出现123111(所有数字的第一位数字相同)时,我们会感到困惑。

如果我做错了什么或 SortDescriptor 以这种方式工作? 我需要同样的解决方案以升序排列数字123,133,213,451,516

要记住的事情 实际上,numbers 属性将包含位数超过 6 的整数。例如 1234567,234568,235481

感谢所有在期待中帮助我的人。

【问题讨论】:

  • 第一反应是你在比较Strings,现在你说是NSNumber,我建议你通过[obj className]重新检查是NSNumber还是NSString
  • 请显示数据模型。如果这是一个数字属性,它就不会像这样工作。您的问题中缺少某些内容。

标签: objective-c core-data ios6 nsnumber nssortdescriptor


【解决方案1】:

您的属性似乎是NSString 类型。确保您到达NSNumber,然后排序将按预期工作。

您的排序描述符中不需要selector:@selector(compare:),因为无论如何这是默认设置。

【讨论】:

  • 感谢您尽快重播。该属性的类型为NSNumber
  • 请将您的问题修改为:(1) 显示不希望的排序结果的示例和 (2) 用于存储属性值的代码。
  • :: 谢谢哥们,它工作得很好。我的Numbers 实际上有一个小错误,有一些错误的数字导致了问题。我修正了数字并应用了您的解决方案,它对我来说非常有效。再次感谢。
【解决方案2】:
[NSSortDescriptor sortDescriptorWithKey:@"self"
                              ascending:YES
                             comparator:^(id obj1, id obj2){
    return [(NSString*)obj1 compare:(NSString*)obj2
                            options:NSNumericSearch];
 }];

这对我来说很好用 完美

【讨论】:

  • 问题是当你有 SQLite 存储时,你不能在 NSSortDescriptor 中使用比较器...
【解决方案3】:

试试这个:

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc]initWithKey:@"rank"  ascending:YES selector:@selector(localizedStandardCompare:)];

【讨论】:

  • +1, localizedStandardCompare 适用于在 NSArray 中使用 NSSortDescriptor 进行数字排序。
  • 我不明白为什么,但我有一个属性为 @property (strong, nonatomic) NSNumber *price; 的对象,我用(即)object.price = @(5727) 设置了这个属性。如果我检查if ([[object price] isKindOfClass:[NSString class]]) - 这是真的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多