我需要检查字典是否有钥匙。如何?
当前回答
if ([[dictionary allKeys] containsObject:key]) {
// contains key
}
or
if ([dictionary objectForKey:key]) {
// contains object
}
其他回答
因为nil不能存储在Foundation数据结构中,NSNull有时表示nil。因为NSNull是一个单例对象,你可以通过直接指针比较来检查NSNull是否是存储在字典中的值:
if ((NSNull *)[user objectForKey:@"myKey"] == [NSNull null]) { }
正如Adirael建议objectForKey检查键的存在,但当你调用objectForKeyin可空字典时,应用程序崩溃,所以我从下面的方式修复了这个问题。
- (instancetype)initWithDictionary:(NSDictionary*)dictionary {
id object = dictionary;
if (dictionary && (object != [NSNull null])) {
self.name = [dictionary objectForKey:@"name"];
self.age = [dictionary objectForKey:@"age"];
}
return self;
}
我建议您将查找结果存储在一个临时变量中,测试临时变量是否为nil,然后使用它。这样你就不会重复查找同一个对象:
id obj = [dict objectForKey:@"blah"];
if (obj) {
// use obj
} else {
// Do something else
}
我喜欢费尔南德斯的回答,尽管你问了两次obj。
这也应该(或多或少与马丁的A相同)。
id obj;
if ((obj=[dict objectForKey:@"blah"])) {
// use obj
} else {
// Do something else like creating the obj and add the kv pair to the dict
}
马丁的回答和这个答案都适用于iPad2 iOS 5.0.1 9A405
if ([[dictionary allKeys] containsObject:key]) {
// contains key
}
or
if ([dictionary objectForKey:key]) {
// contains object
}
推荐文章
- 如何使用UIVisualEffectView来模糊图像?
- 如何改变时间和时区在iPhone模拟器?
- 我如何知道何时UITableView完成了ReloadData?
- 复制文本到剪贴板与iOS
- 什么是Swift相当于respondsToSelector?
- 如何检查NSString是否以某个字符开始
- 尝试将一个非属性列表对象设置为NSUserDefaults
- 对于实例消息,接收方类型***是转发声明
- 如果模态ViewController演示样式为UIModalPresentationFormSheet, iPad键盘将不会解散
- Xcode - ld:没有为- lpods找到库
- NSUserDefaults -如何判断一个键是否存在
- 裁剪一个UIImage
- 无效上下文0x0在iOS 7.0和系统降级
- 在这个块中强烈地捕获self很可能导致保留循环
- 在一个故事板,我如何使一个自定义单元用于多个控制器?