向nsdictionary添加键值会丢失键

时间:2017-05-27 07:27:24

标签: objective-c nsdictionary

我一直在向nsdictionary添加键值对,如此

NSDictionary *dict = @{key1:value1, key2:value2};

如果找不到value1,则应用程序崩溃。所以,我实现了另一种方式

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:value1,key1,value2,key2,nil];

在这种情况下,如果找不到value1,则dict不会更进一步,并且没有key2。解决方案是什么?

2 个答案:

答案 0 :(得分:2)

NSDictionary(以及NSArray)无法存储nil,因为他们需要一个对象。

解决方案是使用NSNull或根本不存储值。在后一种情况下,objectForKey:方法如果找不到给定键的值,则返回nil

在第二个代码示例中,它不会更进一步的问题是此方法需要nil - 终止列表,因此它只会在第一个nil处停止,因为它认为这是结束。

您可以使用setValue:forKey:,如果值为nil,则只删除密钥的值。见here。但是因此它需要是一个可变数组,你必须逐个遍历所有值。

另一种解决方案是使用支票来保护每个价值,例如:如图所示here

答案 1 :(得分:-1)

我找到了解决方案

 NSMutableDictionary *dict2 = [NSMutableDictionary dictionary];
   [dict2 setValue:value1 forKey:key1];
   [dict2 setValue:value2 forKey:key2];
   [dict2 setValue:value3 forKey:key3];

    NSLog(@"dict2 - %@",dict2);

像魅力一样工作!!!