Проверьте ключ существует в NSDictionary - PullRequest
73 голосов
/ 08 января 2011

как я могу проверить, существует ли это?:

[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"]

Я хочу знать, существует этот ключ или нет. Как я могу это сделать?

Большое спасибо:)

EDIT: В dataArray есть объекты. И эти объекты являются словарями NS.

Ответы [ 9 ]

155 голосов
/ 08 января 2011

Я предполагаю, что [dataArray objectAtIndex:indexPathSet.row] возвращает NSDictionary, и в этом случае вы можете просто проверить результат valueForKey против nil.

Например:

if ([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
    // The key existed...

}
else {
    // No joy...

}
46 голосов
/ 26 октября 2012

Итак, я знаю, что вы уже выбрали ответ, но я обнаружил, что он довольно полезен как категория для NSDictionary.На этом этапе вы начинаете получать эффективность со всеми этими различными ответами.Мех ... 6 из 1 ...

- (BOOL)containsKey: (NSString *)key {
     BOOL retVal = 0;
     NSArray *allKeys = [self allKeys];
     retVal = [allKeys containsObject:key];
     return retVal;
}
34 голосов
/ 08 января 2011

Проверьте, что это ноль:

if ([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
    // SetEntries exists in this dict
} else {
    // No SetEntries in this dict
}
8 голосов
/ 14 декабря 2014

это также работает с использованием литералов Objective C с использованием следующего синтаксиса:

NSDictionary *dict = @{ @"key1" : @"value1", @"key2" : @"value2" };
if (dict[@"key2"])
NSLog(@"Exists");
else
NSLog(@"Does not exist");
0 голосов
/ 04 июня 2019

Используйте параметр (unsigned long):

if ( (unsigned long)[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] ) {
    // Key exist;
}else{
    // Key not exist;
};
0 голосов
/ 31 октября 2016

Проверить словарь содержит любое значение.Я предпочитаю [dic allKeys] .count> 0 проверять.

0 голосов
/ 27 октября 2014

Этот делает то же самое, но с меньшим кодом:

if (dataArray[indexPathSet.row][@"SetEntries"] != nil) { /* the key exists */        } 
else                                                   { /* the key doesn't exist */ }
0 голосов
/ 21 апреля 2014

Попробуйте это:

if ([dict objectForKey:@"bla"]) {
   // use obj
} else {
   // Do something else like create the object
}
0 голосов
/ 12 марта 2014
if ((NSNull *)[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
    // SetEntries exists in this dict
} else {
    // No SetEntries in this dict
}

Это правильный ответ.

...