我正在尝试将一个二维数组声明为Objective C中的实例变量 . 我在头文件(数据)中有了NSMutableArray,还有@property(非原子,保留) . 在viewDidLoad中:我有:
data = [[NSMutableArray alloc] init];
[data addObject:[[NSArray alloc] initWithObjects:@"Cheese", @"Meat", @"Veggie", nil]];
[data addObject:[[NSArray alloc] initWithObjects:@"Sandwich", @"Soup", @"Stew", nil]];
我可以在方法中NSLog数组并且它是正确的,但是当我尝试从单独的方法记录它时,我什么也得不到(只是“@”),如果我尝试访问
NSInteger num = [[data objectAtIndex:component] count];
它在日志中没有错误崩溃 . 我确信这与正确分配内存无关,但我是Obj C的新手,多年来一直没有使用过C风格的语言 . FWIW,我尝试过很多变种都失败了,包括使用NSArray代替可变,[NSArray arrayWithObjects]代替[[NSArray alloc] initWithObjects],以及它们之间的每个组合 .
3 回答
尝试像这样创建外部数组:
以下可能是正确的方法 .
请注意,正如@jamihash上面所述,您需要self.data来正确保留数组 . 并且,没有必要
alloc
NSArray
,您要添加到data
.作为一个侧面问题,您将保留两次子数组 . 将它们添加到NSMutableArray时会保留它们,因此您可能应该在创建时自动释放它们,或者使用返回自动释放数组的NSArray方法之一创建它们 .
您的代码本身不应该崩溃 . 您应该查看释放和保留NSMutableArray的位置和时间 . 你可以发布更多的代码,我相信有人会发现问题 .