2017-05-27 69 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