如何检查这是否存在?
[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"]
我想知道这个键是否存在,该怎么做呢?
非常感谢你 :)
编辑: dataArray中有对象。这些对象是NSDictionaries。
如何检查这是否存在?
[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"]
我想知道这个键是否存在,该怎么做呢?
非常感谢你 :)
编辑: dataArray中有对象。这些对象是NSDictionaries。
我假设 [dataArray objectAtIndex:indexPathSet.row]
返回的是一个NSDictionary
,那么您可以直接将valueForKey
的结果与nil
进行比较。
例如:
if ([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
// The key existed...
}
else {
// No joy...
}
我知道你已经选择了一个答案,但我发现这在NSDictionary
上是一个相当有用的类别。到了这个点上,你开始涉及到效率以及各种不同的答案。嗯...半斤八两...
- (BOOL)containsKey: (NSString *)key {
BOOL retVal = 0;
NSArray *allKeys = [self allKeys];
retVal = [allKeys containsObject:key];
return retVal;
}
检查是否为 nil:
if ([[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
// SetEntries exists in this dict
} else {
// No SetEntries in this dict
}
nil
。要表示nil
,可以使用NSNull。 - Aaron Ash同样可以使用Objective-C字面量进行操作,使用以下语法:
NSDictionary *dict = @{ @"key1" : @"value1", @"key2" : @"value2" };
if (dict[@"key2"])
NSLog(@"Exists");
else
NSLog(@"Does not exist");
试试这个:
if ([dict objectForKey:@"bla"]) {
// use obj
} else {
// Do something else like create the object
}
objectForKey:
方法是合适的?为什么不需要显式地检查值?至少,在问题中提供的代码示例将使您的示例更容易与原始问题联系起来。 - Palpatim这个可以用更少的代码实现同样的功能:
if (dataArray[indexPathSet.row][@"SetEntries"] != nil) { /* the key exists */ }
else { /* the key doesn't exist */ }
使用(unsigned long)
选项:
if ( (unsigned long)[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] ) {
// Key exist;
}else{
// Key not exist;
};
检查字典是否包含任何值。我更喜欢使用[dic allKeys].count > 0来进行检查。
if ((NSNull *)[[dataArray objectAtIndex:indexPathSet.row] valueForKey:@"SetEntries"] != nil) {
// SetEntries exists in this dict
} else {
// No SetEntries in this dict
}
那就是正确的答案。
-valueForKey:
而不是-objectForKey:
?前者用于键值编码,比后者稍微慢一些。 - user557219