2010-05-04 2 views
1

Это, наверное, совершенно глупый вопрос, но я довольно новичок в объективе 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

oooh действительно. Я забыл его инициализировать>. <Знал, что это был глупый вопрос;) Большое спасибо за вашу помощь. :) – Quetsche

0

Мы не можем видеть, как инициализируется myComplicatedArray. Возможно, это nil.

0

Вы инициализировали myComplicatedArray где-нибудь?

myComplicatedArray = [[NSMutableArray alloc] init]; 
[self generateValueForArray]; 
// etc... 
Смежные вопросы