Czy istnieje sposób na utworzenie dwuwymiarowego NSArray bez zagnieżdżania tablic w pierwotnym formacie aFloatArray [] [].Wielowymiarowy obiekt NSArray
Dziękuję.
Czy istnieje sposób na utworzenie dwuwymiarowego NSArray bez zagnieżdżania tablic w pierwotnym formacie aFloatArray [] [].Wielowymiarowy obiekt NSArray
Dziękuję.
Niestety nie. Aby stworzyć wielowymiarową NSArray:
NSArray *multiArray = [NSArray arrayWithObjects:
[NSMutableArray array],
[NSMutableArray array],
[NSMutableArray array],
[NSMutableArray array], nil];
// Add a value
[[multiArray objectAtIndex:1] addObject:@"foo"];
// get the value
NSString *value = [[multiArray objectAtIndex:1] objectAtIndex:0];
Jednakże, można użyć kod C w Objective-C (ponieważ jest to ścisłe nadzbiór C), czy pasuje do Twoich potrzeb można zadeklarować tablicę jak miałeś zasugerował.
Jeśli nie używasz garbage collection, to przeciekasz każdą z tablic wewnątrz 'multiArray'. Aby to naprawić, użyj '[NSMutableArray array]'. –
Naprawdę? Rozumiem, że [tablica NSMutableArray] zwróciła autoreleased NSMutableArray, która z kolei zostanie zachowana przez NSArray, do którego jest dodawany! Na pewno to sprawdzę, ponieważ jeśli masz rację, mam dużo kodu, aby przejść przez Lol – FatalMojo
Tak. Chodzi o to, że autoreleased obiekt _is_ zachowany przez tablicę, do której został dodany. Po zwolnieniu macierzy nadrzędnej tak samo jej zawartość. Jeśli dodasz '[NSMutableArray new]' do tablicy, jego liczba zatrzymań stanie się '2'. Po zwolnieniu macierzy nadrzędnej, każde z jej potomków ma nadal wartość "1". –
Można to zrobić:
NSArray *array = @[@[@"0:0", @"0:1"],
@[@"1:0", @"1:1"]];
NSString *value = array[1][0];
myślę, że to jest o wiele krótszy niż "objectAtIndex" rzeczy.
ale uwaga trzeba użyć wersji Jabłko LLVM Compiler> = 4,0
To zdecydowanie nowoczesne podejście. –
Aby wstawić obiekt w tablicy wielowymiarowej w zbiorach lub Tableview cellForRowAtIndexPath:
NSString *sectionRow = [NSString stringWithFormat:@"%d:%d", indexPath.section, indexPath.row];
[dictionary setValue:[UIImage imageWithData:imageData] forKey:sectionRow];
aby pobrać obiekt z tablicy wielowymiarowej w kolekcji lub TableView cellForRowAtIndexPath:
NSString *sectionRow = [NSString stringWithFormat:@"%d:%d", indexPath.section, indexPath.row];
UIImage *cellImage = [dictionary valueForKey:sectionRow];
Co należy wykonać? Być może mogą istnieć inne podejścia, nawet lepiej dostosowane do problemu, który rozwiązujesz. – jlehr