Ваши подозрения о том, что массив является указателем, в основном верны. Проблема в том, что ваш temp_array
не так временен - это фактически один и тот же объект массива каждый раз в вашем цикле.
Вы создаете его вне цикла, и всякий раз, когда вы отправляете его addObject:
или removeAllObjects
, это влияет на то, что вы уже добавили туда.
Ключевая часть, однако, заключается в том, что когда вы добавляете temp_array
к event_container
, это точно такой же объект. Это не копируется; массив event_container
просто получает указатель на temp_array
. Когда вы добавляете это снова, это то же самое. Поскольку event_container
содержит целую кучу указателей, вы в конечном итоге смотрите на один и тот же объект, когда осматриваете его.
Вот что происходит. Чтобы решить эту проблему, вам нужно создать отдельный массив для каждого месяца; Я думаю, что ответ sch будет работать для вас.
Быстрая демонстрация:
NSMutableArray * container = [NSMutableArray array];
NSMutableArray * temp = [NSMutableArray array];
int i;
for( i = 0; i < 5; i++ ){
[temp addObject:[NSNumber numberWithInt:i]];
[container addObject:temp]; // Doesn't copy; just adds pointer to temp
[temp removeAllObjects];
}
// Inspecting container now, we find that it has five arrays, all empty.
NSLog(@"%@", container);