Objective c 向nsdictionary添加键值会丢失键

Objective c 向nsdictionary添加键值会丢失键,objective-c,nsdictionary,Objective C,Nsdictionary,我一直在像这样向nsdictionary添加键值对 NSDictionary *dict = @{key1:value1, key2:value2}; 如果未找到value1,则应用程序将崩溃。所以,我实现了另一种方法 NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:value1,key1,value2,key2,nil]; 在这种情况下,如果找不到value1,则dict不会继续,也没有键2。解决方法是什么?N

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

NSDictionary *dict = @{key1:value1, key2:value2};
如果未找到value1,则应用程序将崩溃。所以,我实现了另一种方法

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:value1,key1,value2,key2,nil];
在这种情况下,如果找不到value1,则dict不会继续,也没有键2。解决方法是什么?

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

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

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

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


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

我已经找到了解决方案

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

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

工作就像一个魅力

我刚才举了一个例子。在实际情况中,我存储了10-20个密钥,我如何检查每个密钥是否为空。编辑了我的答案。可能重复的是“否”。它不是该问题的重复。这是一个不同的问题,不同的问题。这是我在你添加评论后编辑到我的答案中的内容:)@Nef10答案非常有意义。你应该接受答案。