2017-05-27 49 views
0

我已经添加键值对,以NSDictionary中这样添加键值的NSDictionary遗漏键

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

如果VALUE1未找到,应用程序崩溃。所以,我实现做

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

在这种情况下,如果没有找到值1,字典不走的更远,没有KEY2的其他方式。这有什么解决办法?

+0

可能重复[iOS:为什么我不能将nil设置为NSDictionary值?](https://stackoverflow.com/questions/12008365/ios-why-cant-i-set-nil-to-nsdictionary-价值) – Nef10

+0

不,它不是这个问题的重复。这是一个不同的问题和不同的问题。 – Swati

回答

2

NSDictionary(以及NSArray)不能存储nil,因为他们期望一个对象。

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

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

您可以使用setValue:forKey:,如果值为nil,则只会删除该值的值。请参阅here。但是因此它需要是一个可变数组,并且你必须逐个查看所有值。

另一种解决方案是用支票保护每个值,例如,如here所示。

+0

我刚刚举了一个例子。在实际情况下,我存储了10-20个密钥,如何检查每个人是否为空。 – Swati

+0

编辑我的答案。 – Nef10

-1

我已经找到了解决办法

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

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

就像一个魅力!

+0

这就是我添加评论后编辑到我的答案:) – Nef10

+0

哦..我力气看到..谢谢@ Nef10 – Swati

+0

@ Nef10答案非常有意义。你应该接受答案。 – Alok