Сбой кода iOS на commitAnimations в основном потоке
Я анимирую вставку содержимого представления прокрутки для выпадающего меню для обновления.
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, анимация привела к сбою приложения, поскольку я случайно сделал это прямо перед перезагрузкой данных табличного представления. Это произошло потому, что данные в табличном представлении больше не были доступны, поэтому анимация прокручивалась до строки, которой больше не существовало.
Извлеченный урок - если вы работаете с анимацией прокрутки и Базовыми данными, будьте осторожны при выборе перезагрузки данных табличного представления. Не выполняйте выборку, затем прокрутите и перезагрузите данные табличного представления. Выполните выборку, затем перезагрузите данные таблицы, затем прокрутите.
Это было бы действительно очевидно, если бы произошел сбой.