быстрая прокрутка таблицы и нажатие кнопки назад - PullRequest
0 голосов
/ 23 сентября 2011

Когда я быстро прокручиваю свое представление таблицы (длинным и быстрым жестом), чтобы оно прокручивалось еще несколько секунд на экране, отображая мои ячейки (скажем, 3-4 секунды) - и очень быстро я нажимал кнопку "Назад" чтобы вернуться к предыдущему экрану: он работает ... НО тогда прокрутка остановилась бы (на экране, который я больше не вижу - через 3-4 секунды): приложение вылетает! и что каждый раз, когда я делаю этот "модный" краш-тест.

Я использовал свои собственные ячейки табличного представления - и я немного не знаю, с чего начать увлекаться этой ошибкой. Я могу только думать, что предыдущая точка зрения пытается «выпустить» что-то, что, очевидно, больше не отображается.

Кто-нибудь из вас испытывал это? или вы пробовали свои собственные приложения, которые "тестируют", чтобы убедиться, что они не будут падать, как у меня?

любой указатель помощи, конечно, высоко ценится!

Спасибо

Cheers, * 1011 ГБ *

РЕДАКТИРОВАТЬ1: благодаря вашим ответам - я наконец-то увидел, что такое поведение происходит, если вы помещаете мои объекты удаления, как я делал в viewwilldisappear, вместо метода viewDidDisappear ... все хорошо, теперь

Ответы [ 3 ]

0 голосов
/ 23 сентября 2011

Когда представление останавливается, оно вызывает некоторые функции своего делегата scrollView, который, как я полагаю, является вашим ViewController.

Когда пользователь наносит ответный удар, navigationController освобождает тот ViewController, который он отображал.Так что если вы не сохранили его где-то, ViewController будет освобожден, и представление отправит сообщение объекту, который больше не существует.

Чтобы проверить, действительно ли я прав,Вы можете добавить NSZombieEnable = YES в свой проект.После этого вы получите более точную информацию о вашем сбое.

Я предполагаю, что вы увидите что-то вроде: «XXXX сообщение отправлено на освобожденный экземпляр [UIViewController XXXX]»

0 голосов
/ 27 сентября 2011

Причиной этого может быть то, что ваш UITableView живет дольше, чем его источник данных или делегат - вы уверены, что он не протекает?

В методе dealloc для вашего источника данных / делегата вы должны установить

tableView.delegate = nil;
tableView.dataSource = nil;
0 голосов
/ 23 сентября 2011

В действии кнопки «Назад» проверьте это условие.

Например:

-(void)backButtonAction:(id)sender {

//If table is scrolling
 if([mTableView isDecelerating]){
    //Don't push back or condition you want to perform
}

else {
//your condition.
}

}

Поскольку мы знаем, что tableview - это иерархия UIScrollview, мы можем использовать isDecelerating для проверки прокручивания таблицы, когда кнопканажат.

...