【发布时间】: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。
【问题讨论】: