2014-11-23 1 views
0

Я новичок в ИОС, и я действительно застрял на нахождение решения для этого ...SortedArrayUsingSelector непризнанным Selector

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:)] это вызов compare: селектор на все элементы в [animals allKeys] которые NSArray s, которые не поддерживают метод compare: и, таким образом, непризнанный селектор ошибка.

Не уверен, что именно то, что вы хотите, но попробуйте это:

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

спасибо за хорошее объяснение ... это работает. – user3020676

+0

Любопытно, почему ответ был отмечен как принятый, а затем не отмеченный маркой (обратите внимание, я не сделал нисходящий вопрос). Есть ли проблемы с ответом? – ospr

+0

Прошу прощения за это ... может быть, из-за моей проблемы с Интернетом ... извините ... – user3020676