2010-05-04 88 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... 
相关问题