这可能是一个完全愚蠢的问题,但我在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];
(为了清楚起见,我编辑了所有的NSLog)
运行我的应用时,控制台会告诉我:
mySecondaryArray count = 2
mySimpleArray count = 5
myComplicatedArraycount = 0
所以,我知道还有其他方法来制作多维数组, 但我真的很想知道为什么这不起作用。 谢谢。
答案 0 :(得分:2)
看起来你永远不会创建myComplicatedArray
。这意味着
[myComplicatedArray addObject:mySimpleArray];
实际上是
[nil addObject:mySimpleArray];
将消息发送到nil对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];
答案 1 :(得分:0)
我们无法看到myComplicatedArray
是如何初始化的。也许是nil
。
答案 2 :(得分:0)
您是否在某处初始化了myComplicatedArray
?
myComplicatedArray = [[NSMutableArray alloc] init];
[self generateValueForArray];
// etc...