2010-11-03 4 views
5

Existe-t-il un moyen d'obtenir NSMutableArray pour vous permettre d'avoir des "trous" dans le tableau où seules certaines parties du tableau sont remplies au lieu d'avoir des éléments contigus?InsertObjects de NSMutableArray: atIndexes et index au-delà des limites

Je veux créer le tableau initial avec quelques éléments remplis au début du tableau. Quelque temps plus tard, je voudrais insérer 9 nouveaux éléments, pas immédiatement après mon dernier courant, mais à un certain point au milieu du tableau, laissant ainsi un trou dans certaines parties de la liste de tableau.

Je pensais que je pouvais le faire avec mais je reçois l'erreur:

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

Je ne voulais pas insérer des éléments « blancs » dans les trous car cela prends la mémoire quand je peux tenir plusieurs centaines d'objets dans le tableau.

J'ai besoin d'une sorte de structure de données de tableau "crue".

Répondre

4

Vous pouvez le remplir avec [NSNull null]. C'est un singleton, donc vous n'allez pas prendre d'espace supplémentaire en remplissant votre tableau avec 100 [NSNull null] s.

Questions connexes