як я можу перевірити, чи існує це ?:
[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"]
Я хочу знати, існує цей ключ чи ні. Як я можу це зробити?
Дуже дякую :)
EDIT: dataArray містить об’єкти. І ці об’єкти - словники NSD.
як я можу перевірити, чи існує це ?:
[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"]
Я хочу знати, існує цей ключ чи ні. Як я можу це зробити?
Дуже дякую :)
EDIT: dataArray містить об’єкти. І ці об’єкти - словники NSD.
Відповіді:
Я припускаю, що [dataArray objectAtIndex:indexPathSet.row]
повертає NSDictionary
, і в такому випадку ви можете просто перевірити результат valueForKey
протиnil.
Наприклад:
if ([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
// The key existed...
}
else {
// No joy...
}
Отже, я знаю, що ви вже вибрали відповідь, але я знайшов це досить корисним як категорію NSDictionary
. На цьому етапі ви починаєте отримувати ефективність із усіма цими різними відповідями. Ме ... 6 з 1 ...
- (BOOL)containsKey: (NSString *)key {
BOOL retVal = 0;
NSArray *allKeys = [self allKeys];
retVal = [allKeys containsObject:key];
return retVal;
}
Перевірте, чи нуль:
if ([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
// SetEntries exists in this dict
} else {
// No SetEntries in this dict
}
nil
в словнику NSD. Щоб представити нуль, ви можете використовувати NSNull.
це також працює за допомогою літералів Objective-C, використовуючи такий синтаксис:
NSDictionary *dict = @{ @"key1" : @"value1", @"key2" : @"value2" };
if (dict[@"key2"])
NSLog(@"Exists");
else
NSLog(@"Does not exist");
if ((NSNull *)[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
// SetEntries exists in this dict
} else {
// No SetEntries in this dict
}
Це правильна відповідь.
Спробуйте це:
if ([dict objectForKey:@"bla"]) {
// use obj
} else {
// Do something else like create the object
}
objectForKey:
замість іншого методу? Чому вам не потрібно явно перевіряти значення? Принаймні, використання прикладу коду, наведеного у питанні, полегшить прив’язку вашого прикладу до вихідного питання.
Використовуйте (unsigned long)
опцію:
if ( (unsigned long)[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] ) {
// Key exist;
}else{
// Key not exist;
};
-valueForKey:
замість-objectForKey:
? Перший використовується в кодуванні ключ-значення і дещо повільніший за другий.