再次从 N00B 登陆。我已经阅读了很多关于排序数组的内容——想尝试使用 block 方法,但还没有完全理解它。相反,我选择了描述符方法。我通过它们的 NSDate 属性阅读了自定义对象的排序 NSArray以及如何对包含自定义对象的 NSMutableArray 进行排序?在 oodles 和 oodles 中。在我的代码中,我这样做了:
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。