2014-11-23 119 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