/ / Objective C двуизмерни проблеми с паметта на масив - iphone, objective-c, ios, multidimensional-array

Целеви C двумерни матрични проблеми с паметта - iphone, objective-c, ios, multidimensional-array

Опитвам се да обявя двуизмерен масив катопроменлива на променливата в обект С. Имам 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 на масив в рамките на метода и е правилно, но когато се опитам да го Log от отделен метод, аз не получавам нищо (само "@"), и ако се опитам да получа достъп

NSInteger num = [[data objectAtIndex:component] count];

тя се срива без грешка в дневника. Сигурен съм, че това е нещо общо с неправилното разпределение на паметта, но аз съм нов за Obj C и в продължение на много години не съм работил с езика на C-style. FWIW, опитах много варианти на това, които всички не успяват, включително използването на NSArray вместо на mutable, [NSArray arrayWithObjects] вместо [[NSArray alloc] initWithObjects] и всяка комбинация между тях.

Отговори:

1 за отговор № 1

опитайте да създадете външния масив по следния начин:

 self.data = [NSMutableArray arrayWithCapacity:2];  // assuming you"re only adding 2 inner arrays.

1 за отговор № 2

Следното може да е правилно.

self.data = [NSMutableArray array];
[data addObject:[NSArray arrayWithObjects:@"Cheese", @"Meat", @"Veggie", nil];
[data addObject:[NSArray arrayWithObjects:@"Sandwich", @"Soup", @"Stew", nil];

Имайте предвид, че както @jamihash коментира по-горе, имате нужда от самостоятелни данни, за да запазите правилно масива, И няма нужда alloc на NSArray към която добавяте data.


0 за отговор № 3

Като страничен проблем вие задържате дететомасиви два пъти. Те се задържат, когато ги добавите към NSMutableArray, така че е добре да ги възстановите автоматично при създаване или да ги създадете с един от методите NSArray, който връща авторелидиран масив.

Кодът ви сам по себе си не трябва да се срива.Вие трябва да погледнете къде и кога освобождавате и запазвате NSMutableArray.Можете да публикувате повече от кода и аз съм сигурен, че някой ще забележи проблема.