Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSMutableArray's insertObjects:atIndexes and index beyond bounds

Tags:

iphone

Is there a way to get NSMutableArray to allow you to have "holes" within the array where only portions of the array are filled in instead of having contiguous items?

I want to create the initial array with some some elements filled in at the start of the array. Some time later, I would like to insert 9 new items, not immediately after my current last one, but at a some point in the middle of the array, thus leaving a hole in parts of the array list.

I thought I could do this with but I get the error :

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

I didn't want to insert "blank" items in the holes since that would take up memory when I may hold several hundred objects in the array.

I need some sort of a "sparse" array data structure.

like image 584
Justin Galzic Avatar asked Oct 14 '22 21:10

Justin Galzic


1 Answers

You can fill it with [NSNull null]. It's a singleton, so you're not going to be taking up any extra space by filling your array with 100 [NSNull null]s.

like image 117
David Liu Avatar answered Oct 18 '22 03:10

David Liu