2010-11-03 9 views
5

Gibt es eine Möglichkeit, NSMutableArray so einzurichten, dass Sie "Löcher" innerhalb des Arrays haben, in denen nur Teile des Arrays gefüllt sind, statt zusammenhängende Elemente?InsertObjects von NSMutableArray: atIndexes und Index über Grenzen hinweg

Ich möchte das erste Array mit einigen Elementen am Anfang des Arrays erstellt werden. Einige Zeit später möchte ich 9 neue Elemente einfügen, nicht unmittelbar nach meinem aktuellen letzten, sondern an einem Punkt in der Mitte des Arrays, wodurch ein Loch in Teilen der Array-Liste bleibt.

Ich dachte, ich könnte dies tun mit, aber ich bekomme die Fehlermeldung:

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

Code:

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]; 
} 

wollte ich nicht da, dass „leere“ Elemente in die Löcher eingefügt werden würde Speicher aufnehmen, wenn ich mehrere hundert Objekte im Array halten kann.

Ich brauche eine Art "spärliche" Array-Datenstruktur.

Antwort

4

Sie können es mit [NSNull null] füllen. Es ist ein Singleton, also werden Sie keinen zusätzlichen Platz einnehmen, wenn Sie Ihr Array mit 100 [NSNull null] füllen.

Verwandte Themen