iPhone - массив, потерянный между appDidBecomeActive:и запустить запуск цикла?

StackOverflow https://stackoverflow.com/questions/2073488

Вопрос

Редактировать:Я застрял в одном вызове, чтобы вручную сохранить массив сразу после его инициализации, и это исправило проблему.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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top