iPhone - массив, потерянный между appDidBecomeActive:и запустить запуск цикла?
-
20-09-2019 - |
Вопрос
Редактировать:Я застрял в одном вызове, чтобы вручную сохранить массив сразу после его инициализации, и это исправило проблему.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];
}
Я бесконечно просматривал программу с помощью отладчика.Массив корректен вплоть до этого момента, и его адрес в памяти остается тем же самым даже после изменения его содержимого.Однако после этого в нем остается только object - его 10 элементов заменяются одним экземпляром UITouchData.Понятия не имею, откуда это берется.Ни один из моих методов обработки событий не пытается переназначить массив или изменить его.Есть какие-нибудь идеи, что могло пойти не так?Я совершенно озадачен.
Решение
Ты -retain
массив?
Другие советы
Возможно, ваш объект был освобожден?Что произойдет, если вы сохраните его.Это работает или у вас просто утечка памяти?
его 10 элементов заменяются одним экземпляром UITouchData .Понятия не имею, откуда это взялось.
Всегда ли это экземпляр UITouchData?Всегда?-- Потому что это выглядело бы как явный признак проблемы с памятью (если это не ОДНО и то же каждый раз).
Я застрял в вызове сохранения массива сразу после его инициализации, и это исправило ситуацию.Дур.
Спасибо за предложения.Как обычно бывает с такими проблемами, все было очень просто, и, наконец, я сдался и попросил о помощи, что вызвало решение и заставило меня чувствовать себя глупо.:D
Представление инициализирует и освобождает массив?
Вы уверены, что между ними не будет выпущен NSView?
Вы можете проверить, соответствует ли адрес памяти [viewController view]
(== я внутри printCount
) одинаков каждый раз, когда вызывает ваш таймер printCount
.