Проблемы памяти двумерного массива Objective C - PullRequest
0 голосов
/ 17 февраля 2011

Я пытаюсь объявить двумерный массив как переменную экземпляра в Objective C. У меня есть NSMutableArray в заголовке (data) вместе с @property (nonatomic, retain). В 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. Кстати, я пробовал много вариантов этого, которые все терпят неудачу, включая использование NSArray вместо изменяемого, [NSArray arrayWithObjects] вместо [[NSArray alloc] initWithObjects] и каждую комбинацию между ними.

Ответы [ 3 ]

1 голос
/ 17 февраля 2011

Следующее может быть правильным способом.

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.

1 голос
/ 17 февраля 2011

попробуйте создать внешний массив следующим образом:

 self.data = [NSMutableArray arrayWithCapacity:2];  // assuming you're only adding 2 inner arrays.
0 голосов
/ 10 июля 2012

В качестве дополнительной проблемы вы сохраняете дочерние массивы дважды.Они сохраняются при добавлении их в NSMutableArray, поэтому вам, вероятно, следует автоматически высвобождать их при создании или создавать их с помощью одного из методов NSArray, который возвращает автоматически освобожденный массив.

Ваш код сам по себе не должен аварийно завершать работу.Вы должны посмотреть, где и когда вы выпускаете и сохраняете NSMutableArray.Вы можете опубликовать больше кода, и я уверен, что кто-то обнаружит проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...