2015-12-21 67 views
0

我做了一個的NSDictionary,說特定對象後的NSDictionary爲空?

NSDictionary *question = [NSDictionary dictionaryWithObjectsAndKeys: 
            variable_first,@"first", 
            variable_second,@"second", 
            variable_third,@"third", 
            variable_fourth,@"fourth", 
            variable_fifth,@"fifth", 
             nil]; 

這裏,如果

variable_first variable_second variable_third variable_fourth variable_fifth中的任何一個

比,字典不會保存任何鍵開始。

可以這麼說,如果variable_third從服務器是空的,比variable_fourth & variable_fifth不會被添加,不管它們是否有值。

我可以在任何地方看到蘋果寫了這個,或者任何想法爲什麼Objective-C顯示這樣的行爲?

謝謝。

+1

鑑於該列表是'nil'終止,人們可以很容易推斷出'dictionaryWithObjectsAndKeys:'節省了兩雙數據,直到遇到'nil' – Arc676

+1

variable_first variable_first:[NSNull空],@「第一」用這種方式 –

+0

創建字典時,首先檢查所有5個變量值,如果它們爲空,則將它們設置爲空,然後分配給字典。 – poojathorat

回答

1

那怎麼NSDictionary的作品,閱讀文檔。它停在第一個零對象上。第一個零值通常應該是最後添加的零,但如果其他值爲零,則這是dictionaryWithObjectsAndKeys停止的位置。

可以使用現代語法@ {鍵:值,鍵:值,...}

在這種情況下,如果任何值是零,你的應用程序會崩潰。這比默默行爲不當的100倍,因爲應用程序崩潰,你找到原因,你修復它。

修復:您不能嘗試將nil對象添加到字典中。有兩種方法,你需要決定你想要哪一個:或者你從一個可變的字典開始,並且只添加那些值不爲零的鍵/值對。或者你添加一個值[NSNull null]而不是nil給字典。顯然,當你訪問字典時,有一種情況下這些值將返回nil,在另一種情況下,它們將返回[NSNull null]。無論你喜歡什麼。

0

您可以覆蓋所有這些變量的吸氣這樣

-(NSString*) variable_first { 
    if(!_variable_first){ 
    _variable_first = @""; 
    } 
    return _variable_first; 
} 

這樣即使variable_first是從服務器空,你會增加它在你的字典裏一個空字符串,這個問題你正面臨不會發生。

+0

沒有烏薩馬,它不是一個好主意,可以覆蓋每一個對象。我有通用的方法。我知道如何處理它們。我更瞭解如何插入價值。我想知道爲什麼會出現這個問題。迪彭給出了一個封閉的答案。 –

1

不允許將nil值插入NSArray, NSMutableArray或任何此類數據結構。它會拋出插入的異常零值。您可以改爲在其中插入[NSNull null]對象。如果是,則使用以下片段檢查nil然後插入Null對象其他值。

函數在插入數據結構之前檢查空值。

static id isNil(id object) 
{ 
    return object ?: [NSNull null]; 
} 

NSDictionary *question = [NSDictionary dictionaryWithObjectsAndKeys: 
           isNull(variable_first),@"first", 
           isNull(variable_second),@"second", 
           isNull(variable_third),@"third", 
           isNull(variable_fourth),@"fourth", 
           isNull(variable_fifth),@"fifth", 
            nil]; 

它將插入[NSNull null]對象,其中的任何值的是nil並繼續執行。

+0

NSDictionary不會通過任何異常。所以,它是錯的;然而NSArray拋出異常並崩潰。 –

+0

isNull是一個可怕的方法名稱,因爲它不返回參數是否爲空,但是完全不同。 – gnasher729

0

這樣來做: -

NSDictionary *question = [NSDictionary dictionaryWithObjectsAndKeys: 
           a?a:[NSNull null],@"first", 
           b?b:[NSNull null],@"second", 
           c?c:[NSNull null],@"third", 
           d?d:[NSNull null],@"fourth", 
           ef?ef:[NSNull null],@"fifth", 
           nil];