ios 如何判断一个字典是否含有某个键名

如题 比如 我有一个字典

data = {

    id = 1;
    name = "\U70c2\U756a\U8304\Uff5c2015\U5e74\U5ea6\U6700\U4f73\U7535\U5f71";
};

我如何判断它有name键名  有可能返回的是
data =     {
    id = 1;
};

此时 我直接用data[@"name"]就崩溃了  如何解决  谢谢
阅读 17.2k
7 个回答

楼上几位的方法都能判断字典里是否有特定的 key 值,不过楼主的这种写法其实和3楼所说的是一样的,并不会造成崩溃.

allKeys方法返回key数组,然后判断

[keyArray indexOfObject:object] != NSNotFound

楼上正解,没有直接的方法可以判断。一般的方法,和楼上的原理类似。

不同意楼上两位, allKeys 是个数组, 从一个数组里找一个元素效率是很低的。而 NSDictionray 是有个 objectForKey 方法的,如果有相应的 key 就会返回对应的元素, 如果没有就会返回 nil。

if ([data objectForKey:@"name"]) {
    // blabla
}

将这个字典的所有key遍历呗。
假如字典你想查看字典a中是否有个key叫b则这样说
for(int i=0;i《a。allkey。count;i++)

if([a[i] isequeltostring:@"b"])
{
    dlog(@"chadaola")
}

if ([data isKindOfClass:[NSDictonary class]] && [data objectForKey:@"name"]) {
    // 
}

这样不会crash的,如果key存在,则能取到值,否则为nil。

新手上路,请多包涵

正常情况下dict[@"keyName"]是不会crash的,key不存在返回值为nil.
能够crash应该是dict不是dictionary类型 或者你取值或者赋值的对象不支持为nil.
P.S. dict[@"keyName"]这个语法糖实际调用就是[dict objectForKey:@"keyName"]方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏