Неизвестный селектор SortedArrayUsingSelector

Я новичок в iOS, и я действительно застрял в поиске решения для этого...

    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:)];

person user3020676    schedule 23.11.2014    source источник


Ответы (1)


Проблема в этой строке:

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, которые не поддерживают метод compare: и, следовательно, ошибка нераспознанного селектора.

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

animals= [NSDictionary dictionaryWithObjectsAndKeys:_A, @"A", _B, @"B", _C, @"C", nil];
person ospr    schedule 23.11.2014
comment
Любопытно, почему ответ был помечен как принятый, а затем снят с отметки (обратите внимание, я не минусовал ваш вопрос). Есть проблемы с ответом? - person ospr; 25.11.2014