我正在尝试将一个二维数组声明为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],以及它们之间的每个组合。
答案 0 :(得分:1)
尝试像这样创建外部数组:
self.data = [NSMutableArray arrayWithCapacity:2]; // assuming you're only adding 2 inner arrays.
答案 1 :(得分:1)
以下可能是正确的方法。
self.data = [NSMutableArray array];
[data addObject:[NSArray arrayWithObjects:@"Cheese", @"Meat", @"Veggie", nil];
[data addObject:[NSArray arrayWithObjects:@"Sandwich", @"Soup", @"Stew", nil];
请注意,正如@jamihash上面评论的那样,你需要self.data来正确保留数组。并且,您无需alloc
NSArray
添加到data
。
答案 2 :(得分:0)
作为一个副作用,你要保留两次子数组。将它们添加到NSMutableArray时会保留它们,因此您可能应该在创建时自动释放它们,或者使用返回自动释放数组的NSArray方法之一创建它们。
您的代码本身不应该崩溃。您应该查看释放和保留NSMutableArray的位置和时间。您可以发布更多代码,我相信有人会发现问题。