Cocoa/Objective-C - Проверьте, существует ли ключ в NSDictionary

Как проверить, существует ли ключ в NSDictionary?

Я знаю, как проверить, есть ли у него контент, но я хочу, чтобы он был там, потому что он динамический, и я должен его предотвратить. Как и в некоторых случаях, может получиться ключ с "именем" и является значением, но в других случаях может случиться так, что эта пара значений не существует.

Ответ 1

Самый простой способ:

[dictionary objectForKey:@"key"] != nil

как словари возвращают nil для несуществующих ключей (и поэтому вы не можете хранить нуль в словаре, для чего вы используете NSNull).

Изменить: ответьте на комментарий Bradley

Вы также спрашиваете:

Есть ли способ проверить, если это: [[[контактDetailsDictionary objectForKey: @ "professional" ] objectForKey: @ "CurrentJob" ] objectForKey: @ "Роль" ] существует? Не один ключ, потому что это действительно гигантский словарь, поэтому он может существовать в другой категории.

В Objective-C вы можете отправить сообщение в nil, это не ошибка и возвращает nil, поэтому расширение простого метода выше, чем вы просто пишете:

[[[contactDetailsDictionary objectForKey:@"professional"] 
                              objectForKey:@"CurrentJob"] 
                                objectForKey:@"Role"] != nil

как будто какая-либо часть последовательности ключей не существует, LHS возвращает nil

Ответ 2

NSDictionary возвращает все ключи как NSArray, а затем использует containsObject в массиве.

NSDictionary* dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"object", @"key"];
if ([[dictionary allKeys] containsObject:@"key"]) {
  NSLog(@"'key' exists.");
}