2013-10-07 34 views
-1

我正在尝试对一系列英雄(对象)进行排序。每个英雄是那种使用多个描述符对对象进行排序

@interface Hero : NSObject <NSCoding> 

@property (strong,nonatomic) NSString *name; 
@property (strong,nonatomic) NSString *correctAnswers; 
@property (strong,nonatomic) NSString *falseAnswers; 
@property (strong,nonatomic) NSString *bonus; 
@property (strong,nonatomic) NSString *level; 

-(NSInteger*) inLevel; 

+(Hero*) createHero:(NSString*)name 
      inLevel:(NSString*)level 
      withBonus:(NSString*)bonus 
    correctAnswers:(NSString*)correctAnswers 
     andFalseOnes:(NSString*)falseAnswers; 

- (NSString *)description; 

@end 

进行梳理这些英雄的数组我写了一个sortfunction有两个描述

-(void) sortHeros { 
    NSSortDescriptor *level = [NSSortDescriptor sortDescriptorWithKey:@"level" ascending:YES comparator:^NSComparisonResult(id a, id b) { 
     Hero *hero1 = a; 
     Hero *hero2 = b; 

     int levelHero1 = [hero1.level intValue]; 
     int levelHero2 = [hero2.level intValue]; 

     if (levelHero1 > levelHero2) { 
      return (NSComparisonResult)NSOrderedAscending; 
     } else if (levelHero1 < levelHero2) { 
      return (NSComparisonResult)NSOrderedDescending; 
     } 

     return (NSComparisonResult)NSOrderedSame; 
    }]; 

    NSSortDescriptor *bonus = [NSSortDescriptor sortDescriptorWithKey:@"bonus" ascending:YES comparator:^NSComparisonResult(id a, id b) { 
     Hero *hero1 = a; 
     Hero *hero2 = b; 

     int bonusHero1 = [hero1.bonus intValue]; 
     int bonusHero2 = [hero2.bonus intValue]; 

     if (bonusHero1 > bonusHero2) { 
      return (NSComparisonResult)NSOrderedAscending; 
     } else if (bonusHero1 < bonusHero2) { 
      return (NSComparisonResult)NSOrderedDescending; 
     } 

     return (NSComparisonResult)NSOrderedSame; 
    }]; 

    NSArray *sortedArray; 
    sortedArray = [self.heros sortedArrayUsingDescriptors:[NSArray arrayWithObjects:level, bonus, nil]]; 

    self.heros = [sortedArray mutableCopy]; 
} 

Unfotunately它同时与

调用sortedArrayUsingDescriptors排序时5个对象的数组崩溃
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString bonus]: unrecognized selector sent to instance 0x9674520' 

我不知道是怎么回事。有人可以指出我的错误吗?

-------自我解决----------- 嘿谢谢指出解决方案。这是我的正确的代码为其他人有同样的问题。

@interface Hero ... 
-(NSString*) heroBonus; 
-(NSString*) heroLevel; 
@end 

-(void) sortHeros { 
    NSSortDescriptor *level = [NSSortDescriptor sortDescriptorWithKey:@"heroLevel" ascending:NO comparator:^NSComparisonResult(id a, id b) { 
     int levelHero1 = [a intValue]; 
     int levelHero2 = [b intValue]; 

     ... 
    }]; 

    NSSortDescriptor *bonus = [NSSortDescriptor sortDescriptorWithKey:@"heroBonus" ascending:NO comparator:^NSComparisonResult(id a, id b) { 
     int bonusHero1 = [a intValue]; 
     int bonusHero2 = [b intValue]; 

     ... 
    }]; 
    ... 
} 
+0

你有一个NSString *称为”奖金“和NSSortDescriptor *称为”奖金。“也许只是我,但编译器也可能会感到困惑 –

+0

显示你正在收到崩溃的确切线 – Justin

+0

我也会将奖励排序描述符的名称改为sortBonus或者其他东西 – Justin

回答

1

它告诉你,你发送keypath的类没有为“奖金”实现getter或方法。这也是说“NSCFString,这意味着你发送bonus keyPath到一个字符串对象而不是一个Hero对象。