/ / Problemy z dwuwymiarową pamięcią tablicową C celu - iphone, cel-c, ios, tablica wielowymiarowa

Obiektywne problemy z tablicą dwuwymiarową Celu C - iphone, cel-c, ios, tablica wielowymiarowa

Próbuję zadeklarować dwuwymiarową tablicę jakozmienna instancji w Objective C. Mam NSMutableArray w nagłówku (dane), wraz z @ dziedziną (nonatomic, retain). W viewDidLoad: Mam:

data = [[NSMutableArray alloc] init];
[data addObject:[[NSArray alloc] initWithObjects:@"Cheese", @"Meat", @"Veggie", nil]];
[data addObject:[[NSArray alloc] initWithObjects:@"Sandwich", @"Soup", @"Stew", nil]];

Mogę NSLog tablicy w ramach metody i jest poprawna, jednak gdy próbuję zalogować się z oddzielnej metody nie otrzymuję nic (tylko "@"), i jeśli próbuję uzyskać dostęp z

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

ulega awarii bez błędu w dzienniku. Jestem pewien, że ma to jakiś związek z nieprzydzielaniem pamięci, ale jestem nowy w Obj C i od wielu lat nie pracowałam z językiem w stylu C. FWIW, próbowałem wielu wariantów tego, że wszystkie zawodzą, włączając użycie NSArray zamiast mutable, [NSArray arrayWithObjects] zamiast [[NSArray alloc] initWithObjects] i każdej kombinacji pomiędzy.

Odpowiedzi:

1 dla odpowiedzi № 1

spróbuj utworzyć zewnętrzną tablicę w ten sposób:

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

1 dla odpowiedzi nr 2

Następujące mogą być właściwą drogą.

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

Zwróć uwagę, że jak @jamihash skomentował powyżej, potrzebujesz self.data, aby poprawnie zachować tablicę. I nie ma takiej potrzeby alloc temu NSArray do którego dodajesz data.


0 dla odpowiedzi № 3

Dodatkowym problemem jest zatrzymanie dzieckatablice dwa razy. Są one zachowywane po dodaniu ich do NSMutableArray, więc prawdopodobnie powinieneś je automatycznie wydać podczas tworzenia lub utworzyć je jedną z metod NSArray, która zwraca tablicę automatycznie wydaną.

Twój kod sam w sobie nie powinien ulec awarii. Powinieneś sprawdzić, gdzie i kiedy zwolnisz i zatrzymasz NSMutableArray. Możesz opublikować więcej kodu i jestem pewien, że ktoś zauważy problem.