2010-05-04 71 views
1

這可能是一個完全愚蠢的問題,但我在Objective-C和一般程序設計方面都很新穎。 我試圖做一個數組的數組,但不能管理,使其工作:Objective-C爲什麼我的數組數組不能工作?

@interface ArraysAndDicts : NSObject { 
NSMutableArray * mySimpleArray; 
NSMutableArray * myComplicatedArray; 
} 

實現:

-(void)generateValueForArrayOfArrays { 

    [self generateValueForArray]; 
    //this generates an array with 5 elements 'mySimpleArray' 

    [myComplicatedArray addObject:mySimpleArray]; 

    NSMutableArray * mySecondaryArray = [[NSMutableArray alloc] init]; 
    [mySecondaryArray addObject:@"twoone"]; 
    [mySecondaryArray addObject:@"twotwo"]; 

    [myComplicatedArray addObject:mySecondaryArray]; 

(編輯我爲了清楚所有NSLogs)

當運行我的應用程序,控制檯告訴我:

mySecondaryArray數= 2

mySimpleArray數= 5

myComplicatedArraycount = 0

所以,我知道還有其他辦法,使多維數組, 但我真的很想知道爲什麼這是行不通的。 謝謝。

回答

2

它看起來像你永遠不會創造myComplicatedArray。這意味着,

[myComplicatedArray addObject:mySimpleArray]; 

實際上是

[nil addObject:mySimpleArray]; 

發送到零壓根兒就在Objective-C沒有影響的消息,所以什麼也沒發生。當你詢問陣列的數量時,你實際上發送的是[nil count],在你的情況下它將返回0。你可以在這裏找到more information about sending messages to nil


此外,當你在做

NSMutableArray * mySecondaryArray = [[NSMutableArray alloc] init]; 
[mySecondaryArray addObject:@"twoone"]; 
[mySecondaryArray addObject:@"twotwo"]; 

mySecondaryArray會泄漏。你應該釋放它,無論是與autorelease

NSMutableArray * mySecondaryArray = [[[NSMutableArray alloc] init] autorelease]; 
... 

release以適用者爲準。

NSMutableArray * mySecondaryArray = [[NSMutableArray alloc] init]; 
... 
[mySecondaryArray release]; 
+0

確實。我忘了初始化>。<知道這是一個愚蠢的問題;) 非常感謝您的幫助。 :) – Quetsche 2010-05-04 08:23:09

0

我們看不到如何初始化myComplicatedArray。也許它是nil

0

你是否初始化了某個地方的myComplicatedArray

myComplicatedArray = [[NSMutableArray alloc] init]; 
[self generateValueForArray]; 
// etc... 
相關問題