2014-11-23 142 views
0

我新的IOS,我真的停留在此找到解决办法是...SortedArrayUsingSelector无法识别选择

animals = @{@"B" : @[@"Bear", @"Black Swan", @"Buffalo"], 
      @"C" : @[@"Camel", @"Cockatoo"], 
      @"D" : @[@"Dog", @"Donkey"], 
      @"E" : @[@"Emu"], 
      @"G" : @[@"Giraffe", @"Greater Rhea"], 
      @"H" : @[@"Hippopotamus", @"Horse"], 
      @"K" : @[@"Koala"], 
      @"L" : @[@"Lion", @"Llama"], 
      @"M" : @[@"Manatus", @"Meerkat"], 
      @"P" : @[@"Panda", @"Peacock", @"Pig", @"Platypus", @"Polar Bear"], 
      @"R" : @[@"Rhinoceros"], 
      @"S" : @[@"Seagull"], 
      @"T" : @[@"Tasmania Devil"], 
      @"W" : @[@"Whale", @"Whale Shark", @"Wombat"]}; 
    animalSectionTitles = [[animals allKeys] sortedArrayUsingSelector:@selector(compare:)]; 

上面的代码没有错误,但是当我试图插入数组NSDictionary中,它总是显示无法识别的选择。我该怎么做才能解决这个问题?

while (sqlite3_step(statement)==SQLITE_ROW) { 
     Word *univer = [[Word alloc] init]; 
     univer.Id =[NSString stringWithUTF8String:(char *) sqlite3_column_text(statement,0)]; 
     univer.word=[NSString stringWithUTF8String:(char *) sqlite3_column_text(statement,1)]; 
     //NSLog(@"%@",univer.word); 
     NSString *first = [univer.word substringToIndex:1]; 
     NSLog(@"%@",first); 
     if([first isEqualToString:@"A"] || [first isEqualToString:@"a"]){ 
      [_A addObject:univer.word]; 
     } 
     else if([first isEqualToString:@"B"] || [first isEqualToString:@"b"]){ 
      [_B addObject:univer.word]; 
     } 
     else if([first isEqualToString:@"C"] || [first isEqualToString:@"c"]){ 
      [_C addObject:univer.word]; 
     } 
     else if([first isEqualToString:@"D"] || [first isEqualToString:@"d"]){ 
      [_D addObject:univer.word]; 
     } 
     else if([first isEqualToString:@"E"] || [first isEqualToString:@"e"]){ 
      [_E addObject:univer.word]; 
     } 
     else if([first isEqualToString:@"F"] || [first isEqualToString:@"f"]){ 
      [_F addObject:univer.word]; 
     } 
     else if([first isEqualToString:@"G"] || [first isEqualToString:@"g"]){ 
      [_G addObject:univer.word]; 
     } 
     else if([first isEqualToString:@"H"] || [first isEqualToString:@"h"]){ 
      [_H addObject:univer.word]; 
     } 
    } 
animals= [NSDictionary dictionaryWithObjectsAndKeys:_A,_B,_C,_D,_E,_F,_G,_H, nil]; 
animalSectionTitles = [[animals allKeys] sortedArrayUsingSelector:@selector(compare:)]; 

回答

2

的问题是这一行:

animals= [NSDictionary dictionaryWithObjectsAndKeys:_A,_B,_C,_D,_E,_F,_G,_H, nil]; 

当你创建dictionaryWithObjectsAndKeys:字典您提供的项目清单必须objectA, keyA, objectB, keyB, objectC, keyC, nil。现在它看起来像你所有的是objectA, objectB, objectC, nil。它看起来像这样,如果你写出来:

animals = @{@[@"Bear", @"Black Swan", @"Buffalo"] : @[@"Camel", @"Cockatoo"], 
      @[@"Dog", @"Donkey"] : @[@"Emu"], 
      @[@"Giraffe", @"Greater Rhea"] : @[@"Hippopotamus", @"Horse"]}; 

当你调用[[animals allKeys] sortedArrayUsingSelector:@selector(compare:)]它调用[animals allKeys]这是NSArray S于所有项目的compare:选择不支持compare:方法,因此无法识别的选择错误。

不知道你想要什么,但试试这个:

animals= [NSDictionary dictionaryWithObjectsAndKeys:_A, @"A", _B, @"B", _C, @"C", nil]; 
+0

感谢一个很好的解释......它的工作原理。 – user3020676 2014-11-23 22:48:03

+0

好奇为什么答案被标记为接受,然后没有标记(注意,我没有downvote你的问题)。答案有问题吗? – ospr 2014-11-25 00:39:03

+0

我很抱歉,这可能是因为我的网络问题...很抱歉... – user3020676 2014-12-03 09:48:09