【问题标题】:Adding key values to nsdictionary misses keys向 nsdictionary 添加键值会丢失键
【发布时间】:2017-05-27 07:27:23
【问题描述】:

我一直在像这样向 nsdictionary 添加键值对

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

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

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

在这种情况下,如果没有找到value1,dict就不会走得更远,也没有key2。有什么办法解决这个问题?

【问题讨论】:

标签: objective-c nsdictionary


【解决方案1】:

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

解决方案是使用NSNull 或根本不存储该值。在后一种情况下,objectForKey: 方法将返回 nil,如果它没有找到给定键的值,这可能是你想要的。

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

您可以使用setValue:forKey:,如果值为nil,这只会删除键的值。见here。但因此它需要是一个可变数组,并且您必须一个一个地遍历所有值。

另一种解决方案是通过检查来保护每个值,例如如图here

【讨论】:

  • 我刚刚举了一个例子。在实际情况下,我存储了 10-20 个键,我如何检查每个人都为空。
  • 编辑了我的答案。
【解决方案2】:

我找到了解决办法

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

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

像魅力一样工作!!!

【讨论】:

  • 这是我在您添加评论后编辑的答案:)
  • @Nef10 的回答很有意义。你应该接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多