需要帮助使用自定义对象对NSMutableArray进行排序

时间:2011-09-13 11:29:03

标签: iphone objective-c ios ipad

很抱歉打扰你这个问题,但经过几个小时的谷歌搜索和浏览,我仍然无法弄清楚,问题是什么。

问题是,我使用“SearchResult”类型的自定义对象创建了一个NSMutableArray。 SearchResult类仍然非常基础:

@interface SearchResult : NSObject {

    NSString *_id;
    NSString *_title;
    NSNumber *_year;
}

@property (nonatomic, copy) NSString *id;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSNumber *year;

@end

这是代码,其中(坏)魔法发生:

if (self.sResults == nil) {
    self.sResults = [[NSMutableArray alloc] init];
}
else if ([self.sResults count] > 0){
    [self.sResults removeAllObjects];
}
//JsonConverter uses JsonTouchKit for parsing a json string
JsonConverter *_converter = [[JsonConverter alloc] init];
NSDictionary *parsedResults = [_converter getParsedObjectFromData:results];

for (NSDictionary *movieObj in [parsedResults objectForKey:@"results"]) {
    SearchResult *movie = [_converter newSearchResultObjectFromSearchJsonObject:movieObj];
    [self.sResults addObject:movie];
}
[_converter release];
//sort the results
NSSortDescriptor *desc = [[[NSSortDescriptor alloc] initWithKey:@"year" ascending:NO] autorelease];

NSArray * sortDescriptors = [NSArray arrayWithObject:desc];
[self.sResults sortUsingDescriptors:sortDescriptors];  //<-- HERE!!!
[self.tableView reloadData];

问题是,如果我只得到一些结果,例如3,一切都很好,数组正确排序。但是只要我得到更多结果,例如18,应用程序在标记的行上以'SIGABRT'和下面的堆栈崩溃。 如果我用我对gdb命令的一点知识检查给定的地址“0x5c31470”,我得到以下内容:

po 0x5c31470 -> 2004 //yes, thats the year it should use for sorting
whatis 0x5c31470 -> type = int

堆栈追踪:

  

2011-09-13 12:30:10.352 VideoCatalogue [1294:207] - [NSCFNumber length]:无法识别的选择器发送到实例0x5c31470

     

2011-09-13 12:30:10.353 VideoCatalogue [1294:207] * 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSCFNumber length]:无法识别的选择器发送到实例0x5c31470'

有谁有任何想法,我怎么能解决这个问题?非常感谢!

1 个答案:

答案 0 :(得分:0)

使用此方法:NSArray Class Reference 查找以下内容的解释:sortedArrayUsingFunction:context: