Почему возникает ошибка: класс не соответствует значению ключа для имени ключа? - PullRequest
0 голосов
/ 29 марта 2020

Как предложено в предложении автозаполнения Xcode, используя приведенный ниже код в цели c, возникла ошибка времени выполнения,

for (int i = 1; i <= 10; i++)
{
    NSLog(@"%d", i);

    NSDictionary *dic = [[NSDictionary alloc] init];
    [dic setValue:@"Alex" forKey:@"name"];
    [dic setValue:@"45" forKey:@"Age"];
}

2020-03-29 21: 55: 34.588607 + 0600 Test [5299: 15492347 ] *** Завершение работы приложения из-за необработанного исключения «NSUnknownKeyException», причина: «[<<__ NSDictionary0 0x7fff806228e0> setValue: forUndefinedKey:]: этот класс не соответствует значению ключа, кодирующему имя ключа. '

Чего мне не хватает?

Обновление

Поскольку matt прокомментировал NSDictionary не является изменяемым, то

  1. Почему метод setValue доступен для NSDictionary в предложении автозаполнения на XCode?

  2. Почему методы, которые изменяют неизменяемые коллекции, не могут быть обнаружены во время компиляции, а во время выполнения?

1 Ответ

0 голосов
/ 13 апреля 2020

Я решил проблему, изменив setValue на setObject,

NSDictionary *dic = [[NSDictionary alloc] init];
[dic setObject:@"Alex" forKey:@"name"];
[dic setObject:@"45" forKey:@"Age"];
...