2012-06-07 2 views
0

Я анимирую прокрутку в окне содержимого прокрутки для обновления вниз.iOS-код сбой на commitAnimations while в основном потоке

NSLog(@" in main thread? %d", [NSThread isMainThread]); // prints 1 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:.3]; 
[scrollView setContentInset:UIEdgeInsetsMake(0.0f, 0.0f, scrollView.contentInset.bottom, 0.0f)]; 
// Crash here 
[UIView commitAnimations]; 

Я получаю сбой при совершении анимации, и он разбивает его на основной поток. Если я удалю этот блок кода, мое приложение никогда не выйдет из строя. Что может привести к сбою в этом пункте, если он в значительной степени сужается до этого блока кода?

ответ

1

Поскольку анимация должна была прокручиваться, а cellForRowAtIndexPath ссылалась на результаты запроса на выборку Core Data, анимация разбила приложение, так как я случайно сделал это прямо перед перезагрузкой данных табличного представления. Это произошло потому, что данные в представлении таблицы больше недоступны, поэтому анимация прокручивается до строки, которая больше не существует.

Извлеченный урок - если вы работаете с анимацией scrollview и основными данными, будьте осторожны, когда вы решите перезагрузить данные табличного представления. Не выполняйте выборку, затем прокрутите, а затем перезагрузите данные табличного представления. Выполняйте выборку, затем перезагружайте данные табличного представления, затем прокручивайте.

Было бы очень очевидно, было ли сообщение об ошибке сбой.

Смежные вопросы