2012-05-18 25 views
0

我要订购NSMutableArray包含对象根据两个对象属性其中之一有double类型第二个有NSString按照double值排序NSmutable数组包含对象

我试图用这个方法,但我得到异常:

NSString * LASTNAME = @"lastName"; 
NSString * GRADE = @"grade"; 

NSSortDescriptor *lastDescriptor = 
    [[NSSortDescriptor alloc] 
     initWithKey:LASTNAME 
      ascending:YES 
      selector:@selector(localizedCaseInsensitiveCompare:)]; 

NSSortDescriptor *firstDescriptor = 
    [[NSSortDescriptor alloc] 
     initWithKey:GRADE 
      ascending:YES 
      selector:@selector(localizedCaseInsensitiveCompare:)]]; 

NSArray * descriptors = 
    [NSArray arrayWithObjects:lastDescriptor, firstDescriptor, nil]; 
NSArray * sortedArray = 
    [students sortedArrayUsingDescriptors:descriptors]; 

@interface Student : NSObject 
{ 
    NSString * firstName; 
    NSString * lastName; 
    double grade; 
} 

回答

1

数字没有的情况下,可以尝试使用比较:甲级

编辑后:你没有说什么错误你得到了。你发布的代码甚至编译了吗?你在第一个描述符中有一个错字 - 在方法结尾处有一个太多的“]”。当你拿出比较的时候,你可能会修正这个问题:(这不应该解决任何问题)。

1

NSNumber不响应localizedCaseInsensitiveCompare:。你只需要简单的compare:的号码。

+0

我应该做高档的NSNumber代替双我想比较,但我又站了异常? – kartal

+0

@salamonti:键值编码将返回一个双倍的NSNumber,所以这不成问题。你得到的确切例外是什么? – Chuck

+0

你是对的,我通过删除比较解决它,所以它将是 NSSortDescriptor * firstDescriptor = [[NSSortDescriptor alloc] initWithKey:GRADE 递增:YES]]; – kartal

0

删除localizedCaseInsensitiveCompare

NSSortDescriptor *firstDescriptor = 
    [[NSSortDescriptor alloc] 
     initWithKey:GRADE 
      ascending:YES]]; 
+0

这段代码不会编译 - 再一次,最后有一个额外的“]”。 – rdelmar

相关问题