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];
可悲的是,我开始时遇到错误 - initializer元素不是编译时元素。我查了一下并试着设置NSSortDescriptor *highScoreDescriptor = nil
然后我得到一个警告,说highScoreDescriptor“Type Specifier Missing,默认为int”,在这种情况下是好的,但对于下一个描述符中的Date对象不太好。 (原来我也得到一个错误,说我正在重新定义不同类型的highSoreDescriptor。)
此外,有哪些选择器可用的列表?我怀疑localizedCaseInsensitiveCompare:
是我想要使用的,因为第一个属性“_highScore”是一个int而第二个“_dateCreated”是一个日期。我读到某处默认是“比较”,所以我可以把“比较:”? (找到一个答案,我认为 - 我可以使用(intValue)作为第一个描述符:
selector:@selector(intValue)] autorelease];
更多的阅读让我觉得我可以完全取消日期排序的选择线。这是对的吗?
最后,如果我说ascending:NO
与降序相同?我猜它是,但是人们从不知道编程,是吗?
我是否将所有这些代码包装在自己的方法中?或者我可以(直到后来)将它插入到我正在布置表格的代码中?
这个项目不是ARC。
答案 0 :(得分:1)
要回答我自己的问题,在朋友的帮助下,我基本上做了两件事。首先,我在一个方法之外编写代码 - 这就是我得到初始化元素的所有错误的原因。当我添加这个时,我想我很累。
至于实际的排序,我从描述符描述中删除了选择器选项,实际发生了排序!
最后,是的,ascending:NO
等于降序。
最后一点,必须等到我准备好解决应用程序的更多重构。