РЕДАКТИРОВАНИЕ: изменено для использования менее злого метода благодаря комментарию Томми.
Вы можете рассматривать статические массивы как указатели и сохранять их в NSValue
объектах:
[mutableArray addObject:[NSValue valueWithPointer:lvl1]];
...
int* level = [(NSValue*)[mutableArray objectAtIndex:whatever] pointerValue];
int someContainedInt = level[index];
В качестве альтернативы, вы можете обернуть каждый отдельный массив в свой собственный NSData
объект и сохранить их в изменяемом массиве:
[mutableArray addObject:[NSData dataWithBytes:lvl1 length:sizeof(int) * lengthOfArray]];
...
const int* level = (const int*) [(NSData*) [mutableArray objectAtIndex:whatever] bytes];
Однако я должен согласиться с Фрэнком Си - почемувам нужно использовать массив Какао для хранения этих массивов вообще?Разве вы не можете просто рассматривать весь массив как двумерный массив C?Если в любом случае это статические данные, то динамические аспекты NSMutableArray
кажутся в значительной степени излишними.
РЕДАКТИРОВАТЬ 2: Использование массивов C
Если массивы уровней все одинаковыедлина - назовите его LEVEL_SIZE
- вы можете построить прямой 2D-массив следующим образом:
static int levels[][LEVEL_SIZE] =
{
{1, 2, 3, 4, ...},
{15, 17, 19, 21, ...},
{8, 7, 6, 5, ...}
};
В противном случае вам нужно будет построить каждый массив отдельно, а затем собрать их вместе:
static int level1[] = {1, 2, 3, 4, ...};
static int level2[] = {15, 17, 19, 21, ...};
static int level3[] = {8, 7, 6, 5, ...};
...
static int* levels[] = {lvl1, lvl2, lvl3, ...};
В любом случае, вы можете выбрать один уровень в качестве указателя:
int* level = levels[0];
printf("%d\n", level[1]); // should print 2
Для начала у вас будет NUM_LEVELS
уровней - в вашем случае 50 - так что придерживайтесьстолько индексов 0..49 в ваш изменяемый массив, как NSNumber
объекты:
NSMutableArray* levelIndices = [NSMutableArray arrayWithCapacity:NUM_LEVELS];
for ( int i = 0; i < NUM_LEVELS; ++i )
[levelIndices addObject:[NSNumber numberWithInt:i]];
Используйте этот массив для подсчета, получения и удаления потребностей.Когда вы вытаскиваете объект NSNumber
, используйте его для индексации в массиве уровней, чтобы получить уровень:
int* level = levels[[someNSNumber intValue]];
Et voila.