Objective-C для чайников: как получить значение из NSDictionary? - PullRequest
1 голос
/ 29 января 2011

так что у меня самое сложное время извлечения значений из NSDictionary. Сейчас у меня просто словарь, который заполняется из вызова JSON, и он содержит только ключ с именем «Success» со значением 0 или 1.

Как сделать условие для этого значения, чтобы проверить, равно ли оно 0 или 1? Я перепробовал кучу вещей, но никуда не денусь. Вот мой текущий код:

[[jsonDictionary objectForKey:@"Success"] isEqualToNumber:1]

Я получаю passing argument 1 of 'isEqualToNumber:' makes pointer from integer without a cast' в качестве предупреждения, и приложение все равно падает, когда оно попадает в эту строку.

И подвопрос, в чем разница между objectForKey и valueForKey? Какой из них я должен использовать по умолчанию?

В любом случае, этот новичок в Objective-C был бы очень признателен за помощь в этом. Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 29 января 2011

Поскольку словари содержат объекты Objective-C, запись, содержащая число, является экземпляром NSNumber.NSNumber предоставляет удобный метод -intValue для извлечения базового значения int:

if ([[jsonDictionary objectForKey:@"Success"] intValue] == 1) { … }

Обратите внимание, что NSNumber имеет другие удобные методы для извлечения базового значения в качестве других типов данных C.


В большинстве случаев вы должны использовать -objectForKey: вместо -valueForKey:. Первый - это канонический метод для получения записи в словаре, который объявлен в NSDictionary.Последний объявлен в NSObject и используется в контекстах кодирования значения ключа, где ключ должен быть действительным ключом KVC, и есть дополнительная обработка - например, если вы используете -valueForKey: в словаре с ключомначинается с @, этот символ удаляется с клавиши и вызывается [super valueForKey:key].

2 голосов
/ 29 января 2011

Число 1 не является указателем объекта.Вместо этого используйте экземпляр NSNumber, если вы хотите использовать число в NSDictionary.

[[jsonDictionary objectForKey:@"Success"]
 isEqualToNumber:[NSNumber numberWithInteger:1]]
1 голос
/ 29 января 2011
 [[jsonDictionary objectForKey:@"Success"] isEqualToNumber: [NSNumber numberWithInt:1]]
0 голосов
/ 24 марта 2017

Вы можете получить значение словаря различными способами, например, сначала проверить значение.

Solution 1: Using simple if statement.
int value = 0;
if ([[jsonDictionary objectForKey:@"Success"]intValue]==1){
    value = [[jsonDictionary objectForKey:@"Success"]intValue];
}

Solution 2: Using ternary operator
value = ([[jsonDictionary objectForKey:@"Success"]intValue]==1) ? 1:0;
...