2016-03-03 27 views
0

我的問題是如何將Null值傳遞給NSMutableArray/NSArray。將空值和一個變量傳遞給NSMutableArray/NSArray。爲什麼產量有差異?

但通過搜索谷歌和經歷不同的網站,我認爲我已經達到了我的目的。但是,雖然嘗試我有一個新的懷疑。

請參見下面的代碼來了解我的問題

我聲明一個可變的數組,並開始與一些對象初始化它也是我傳遞一個空到它在聲明自己的時間。

現在,當我下面

NSMutableArray * mar = [[NSMutableArray alloc]initWithObjects:@"first",@"last", nil]; 

[ar addObject:[NSNull null]]; 

NSLog(@"%@",mar); 

運行這段代碼的O/P爲:

(
    first, 
    last, 
    "<null>" 
) 

但我的實際疑問是,當我初始化的NSMutableArray如下

NSString *str; 

NSMutableArray * mar = [[NSMutableArray alloc]initWithObjects:@"first",str,@"last", nil]; 

[ar addObject:[NSNull null]]; 

NSLog(@"%@",mar); 

該O/P是:

(
    first, 
    "<null>" 
) 

數組中的第二個元素是「空」,我明白,因爲我已經傳遞了一個變量沒有分配任何值。它打印爲空。但爲什麼沒有打印剩餘的元素。

根據我所知,數組在初始化時會在nil克服nil時停止添加元素。但在這裏,在這種情況下。 o/p顯示第二個元素也爲空(但不爲零)

那麼爲什麼其餘元素不能打印。

UPDATING QUESTION

NSString* str; 
NSLog(@"%@",str); 
NSMutableArray * mar = [[NSMutableArray alloc]initWithObjects:@"first",str,@"last", nil]; 

NSLog(@"%@",mar); 

和上述代碼中的O/P是

(null) // for str an uninitialised NSString variable. 


(
    first // first element in the array 
) 

如果存在於str中的值是(空),如何來陣列遇到零和停止添加排列和打印它們的元素。

現在,有人回答這個問題嗎?

+0

你爲什麼不只是使用'「」',一個空字符串。你可以在你想要的時候給它賦值,如果你想做比較,當然可以使用'if ans =='''' – Lee

+0

@Lee。我可以像你說的那樣使用它來使程序工作。但我的問題是不同的。我的問題是,爲什麼當我傳遞一個變量而沒有分配任何值時它不能正常工作。 – Mahesh

+0

@Mahesh第二個元素爲null,因爲在它被記錄之前在行中添加了[NSNull null] – ZeMoon

回答

2

initWithObjects使用nil作爲最後一項的標記。如果您通過nil(單元化的str變量)作爲第4項中的第2項,則僅實際添加第一項。

[[NSMutableArray alloc]initWithObjects:@"first",str ?: [NSNull null],@"last", nil]; 

將由具有[NSNull null]更換nil解決您的問題。

另見NSArray creation with variable argument lists

+0

謝謝你的明確解釋。 – Mahesh

+0

@Mahesh我真的不能看到你原來的問題有什麼不同。 'str'仍然是'nil','nil'仍然是參數列表結尾的標記,因此所有其他項目都不會被添加。 '(null)'只是'nil'的字符串表示形式(參見'NSLog(@「%@」,nil)'')。 – Sulthan

+0

實際上,這個問題還沒有被更新,因爲我認爲它會。但無論如何,你的答案的這一部分清除了我的懷疑。 (null)只是nil的字符串表示形式(請參見NSLog(@「%@」,nil)) – Mahesh

-1

在客觀-C,通過如果再遇到零/空它被作爲陣列的端部處理的陣列迭代時。

這是它不打印剩餘值的原因。

如果你想零/零/零之間的差異清晰然後檢查Difference between nil, NIL and, null in Objective-C

+0

完全錯誤。 Objective-C數組_never_包含nil,並且[NSNull null]不被視爲數組的結尾。 – gnasher729

+0

@ gnasher729當你在xcode中初始化數組時不要你把最後一個對象作爲nil。標記數組的末尾。 有問題,請參考代碼他添加NSSTring的未初始化的對象,而不是[NSNull null],這就是爲什麼數組結束,並不打印下一個元素。 如果你同意請不投票。 – vivek

+0

@vivek感謝nil/null/Nil之間的差異 – Mahesh

相關問題