2010-11-03 7 views
5

Czy istnieje sposób na uzyskanie NSMutableArray, aby umożliwić ci "dziury" w tablicy, w której tylko części tablicy są wypełniane, zamiast ciągłych elementów?Wstawianie NSMutableArrayObjects: atIndexes i indeks poza granicami

Chcę utworzyć początkową tablicę z niektórymi elementami wypełnionymi na początku tablicy. Jakiś czas później chciałbym wstawić 9 nowych elementów, nie bezpośrednio po moim aktualnym ostatnim, ale w pewnym punkcie w środku tablicy, pozostawiając dziurę w częściach listy tablic.

Myślałem, że mogę to zrobić z, ale pojawia się błąd:

NSRangeException', reason: '*** 
-[NSMutableArray insertObject:atIndex:]: index 28 beyond bounds [0 .. 5]' 

Kod:

NSMutableArray *targetArray = [NSMutableArray arrayWithCapacity:100]; 

- (void)fillInInitially { 

// Add the first set of elements to the beginning of the array 
    for (int i = 0; i < [initialData count]; ++i) 
    { 
     [targetArray insertObject:[initialData objectAtIndex:i] atIndex:i]; 
    } 
} 

- (void)fillInTheBlank:(NSArray *) additions { 

    // Start adding at index position 28 and current array has 5 items 
    NSRange range = NSMakeRange(28, [additions count]);  
    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:range]; 

    // Can't do this when I'm trying to add 9 new items at index 28 
    // because of the error: index 28 beyond bounds [0 .. 5] 
    [targetArray insertObjects:additions atIndexes:indexSet]; 
} 

Nie chciałem, aby wstawić „Blank” elementów w otworach Od tego będzie zajmuj pamięć, kiedy mogę pomieścić kilkaset obiektów w tablicy.

Potrzebuję jakiejś "rzadkiej" struktury danych tablicy.

Odpowiedz

4

Możesz wypełnić go przy użyciu [NSNull null]. Jest to singleton, więc nie zajmujesz dodatkowej przestrzeni, wypełniając tablicę 100 [NSNull null] s.

Powiązane problemy