Objective c 向nsdictionary添加键值会丢失键
我一直在像这样向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 *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答案非常有意义。你应该接受答案。