【问题标题】:Sorting NSArray on two properties - int and date根据两个属性对 NSArray 进行排序 - int 和 date
【发布时间】:2012-05-03 14:42:07
【问题描述】:

来自 N00B 的笔记再次登陆。我已经阅读了很多关于排序数组的内容——想尝试使用 block 方法,但还没有完全理解它。相反,我选择了描述符方法。我读过这个Sort NSArray of custom objects by their NSDate properties 和这个How to sort an NSMutableArray with custom objects in it? 以及其他人。在我的代码中,我这样做了:

NSString *lastHighScore = @"_highScore";
NSString *dateScoreCreated = @"_dateCreated";
NSSortDescriptor *highScoreDescriptor = [[[NSSortDescriptor alloc]
    initWithKey:lastHighScore                                        
    ascending:NO                                          
    selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];

NSSortDescriptor *dateScoreCreatedDescriptor = [[[NSSortDescriptor alloc]
                                      initWithKey:dateScoreCreated
                                      ascending:NO
    selector:@selector(localizedCaseInsensitiveCompare:)] autorelease];
NSArray *descriptors = [NSArray arrayWithObjects:highScoreDescriptor, 
dateScoreCreatedDescriptor, nil];

NSArray *sortedArray = [[[FlipHighScoreStore sharedStore] allHighScores] sortedArrayUsingDescriptors:descriptors];

遗憾的是,我一开始就遇到错误 - 初始值设定项元素不是编译时元素。我查看了这个并尝试设置NSSortDescriptor *highScoreDescriptor = nil,但随后我收到一条警告,提示 highScoreDescriptor“缺少类型说明符,默认为 int”,在这种情况下是可以的,但对于下一个描述符中的 Date 对象来说不是那么好。 (结果我也收到一条错误消息,说我正在用不同的类型重新定义 highSoreDescriptor。)

另外,是否有可用选择器的列表?我怀疑localizedCaseInsensitiveCompare: 是我想要使用的,因为第一个属性“_highScore”是一个int,第二个“_dateCreated”是一个日期。我在某处读到默认值是“比较”,所以我可以输入“比较:”吗? (找到一个答案,我想 - 我可以使用 (intValue) 作为第一个描述符:

selector:@selector(intValue)] autorelease];

更多的阅读使我认为我可以完全取消选择器行以进行日期排序。对吗?

最后,如果我说ascending:NO 与降序相同吗?我猜是这样,但编程永远不会知道,不是吗?

我是否将所有这些代码包装在自己的方法中?或者我可以(直到稍后)将它插入我正在布置表格的代码中吗?

这个项目不是 ARC。

【问题讨论】:

    标签: ios sorting nsarray


    【解决方案1】:

    为了回答我自己的问题,在朋友的帮助下,我基本上做错了两件事。首先,我在一个方法之外编写代码——这就是为什么我得到所有关于初始化元素的错误。我想当我添加这个时我很累。

    至于实际排序,我从描述符描述中删除了选择器选项,排序确实发生了!

    最后,是的,ascending:NO 等于降序。

    最后一点,必须等到我准备好处理应用程序的更多重构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 2011-01-12
      • 1970-01-01
      • 2020-11-22
      • 2011-05-17
      • 2017-07-18
      • 1970-01-01
      相关资源
      最近更新 更多