EDIT: я застрял в одном вызове, чтобы вручную сохранить массив сразу после его инициализации, и это исправило его. Dur. Спасибо.
Я сохраняю NSMutableArray в подклассе UIScrollView и добавляю в него экземпляры подкласса UIImageView, поскольку каждый из них добавляется как подпредставление. Это должен быть изменяемый массив, так как я планирую со временем изменить их порядок в массиве; эта ошибка возникает еще до того, как я пытаюсь это сделать. Я использовал NSLogs, чтобы показать, что массив имеет счет до 10, включая applicationDidBecomeActive: вызывается в моем AppDelegate, и добавил таймер для запуска каждые 0,001 с в цикле выполнения. При первом запуске он не может найти массив больше! Я очень смущен и пытаюсь выследить это часами.
Таймер работает правильно (то есть, когда printCount: не обращается к массиву, это нормально), только когда я пытаюсь получить доступ к массиву там, он ломается. Обычный вызов printCount: ниже работает, но в первый раз срабатывает таймер. Что может произойти между этими двумя вызовами printCount:?
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSTimer *timer = [[NSTimer scheduledTimerWithTimeInterval:0.001f
target:[viewController view]
selector:@selector(printCount)
userInfo:nil
repeats:YES]
retain];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[[viewController view] printCount];
}
Я бесконечно шагал по программе с помощью отладчика. Массив корректен вплоть до этой точки, и его адрес памяти остается неизменным даже после изменения его содержимого. Однако впоследствии в нем остается только один объект - его 10 элементов заменяются одним экземпляром UITouchData. Понятия не имею, откуда это. Ни один из моих методов обработки событий не пытается переназначить массив или изменить его. Есть идеи, что может пойти не так? Я полностью озадачен.