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