2011-07-15 60 views
2

不知道爲什麼我會在函數調用中丟失哨兵?在函數調用中缺少哨兵?

NSMutableArray *kkk = [NSMutableArray arrayWithObjects: @"a", @"b", @"cat", @"dog", nil]; 
ppp = [NSMutableArray arrayWithCapacity:3]; 
[ppp addObject:[[NSMutableArray alloc] initWithObjects: kkk]]; // <<--- Missing sentinel in function call 
[ppp addObject:[[NSMutableArray alloc] initWithObjects: kkk, nil]]; //<<--- change, but it falls out 

NSLog(@"Working: %@ %@", [[ppp objectAtIndex:0] objectAtIndex:3], [[ppp objectAtIndex:0] objectAtIndex:2]); 
+0

中的方法帶可變參數被稱爲** **可變參數的方法。參數被稱爲** varargs **。這些參數應以* nil *作爲最後一個參數終止。 – EmptyStack

回答

6

initWithObjects:必須以尾隨nil終止。既然它是一個單一的對象,你應該能夠使用initWithObject:。也就是說,你會像這樣泄漏陣列。做

[ppp addObject:[NSMutableArray arrayWithObject:kkk]]; 

還有一個問題那塊這裏的代碼,

NSMutableArray *kkk = [NSMutableArray arrayWithObjects: @"a", @"b", @"cat", @"dog", nil]; 
ppp = [NSMutableArray arrayWithCapacity:3]; 
[ppp addObject:[[NSMutableArray alloc] initWithObjects: kkk, nil]]; 

您正在創建一個三維陣列。所以

NSLog(@"Working: %@ %@", [[ppp objectAtIndex:0] objectAtIndex:3], [[ppp objectAtIndex:0] objectAtIndex:2]); 

是錯誤的。

NSLog(@"Working: %@ %@", [[[ppp objectAtIndex:0] objectAtIndex:0] objectAtIndex:3], [[[ppp objectAtIndex:0] objectAtIndex:0] objectAtIndex:2]); 

應記錄適當的值。

但是如果你需要根據你的日誌聲明二維數組,我會說你需要做的這個代替,

[ppp addObject:kkk]; 
+0

添加了列表中之前的一行代碼。你給的3個解決方案,沒有一個在工作,除非我做錯了什麼......你可以看到代碼....謝謝。 –

+0

感謝您的幫助 –

4

您需要添加nil作爲列表中的最後一個對象。

[ppp addObject:[[NSMutableArray alloc] initWithObjects: kkk, nil]]; 

基本上它告訴方法停止尋找更多的對象。沒有它,它可以看一個糟糕的指針和崩潰。

+0

不工作...跌倒 –

+0

@Kristen Martinson,這應該工作! – EmptyStack

+0

@Kristen:定義*「跌出」*。 –