Не удалось найти причину сбоя - [UIScrollView (UIScrollViewInternal) _scrollViewAnimationEnded: завершено:]
В моем приложении много сообщений со следующим журналом сообщается очень часто, но даже с несколькими тестовыми устройствами и версиями iOS я не могу воспроизвести его. Поэтому нет способа найти причину на Xcode. Поскольку нет следа в следе, это приводит к моему коду, я не могу представить, как можно найти его происхождение. Само приложение очень сложное, и, конечно же, используются многие прокрутки, также встроенные.
Есть ли у кого-нибудь идея, с чего начать искать? Или у кого-то была аналогичная проблема раньше?
Я очень благодарен за любую помощь!
С уважением,
Флориан
OS Version: iPhone OS 6.0.1 (10A523)
Report Version: 104
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0xd1d28fbc
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x392e65b0 objc_msgSend + 16
1 UIKit 0x35a839f7 -[UIScrollView(UIScrollViewInternal) _scrollViewAnimationEnded:finished:] + 135
2 UIKit 0x35a838e9 -[UIAnimator stopAnimation:] + 469
3 UIKit 0x35b1e257 -[UIAnimator(Static) _advanceAnimationsOfType:withTimestamp:] + 295
4 UIKit 0x35a83381 -[UIAnimator(Static) _LCDHeartbeatCallback:] + 53
5 QuartzCore 0x323d3071 CA::Display::DisplayLink::dispatch(unsigned long long, unsigned long long) + 161
6 QuartzCore 0x323d2fc9 CA::Display::IOMFBDisplayLink::callback(__IOMobileFramebuffer*, unsigned long long, unsigned long long, unsigned long long, void*) + 65
7 IOMobileFramebuffer 0x340befd7 IOMobileFramebufferVsyncNotifyFunc + 155
8 IOKit 0x35ee8449 IODispatchCalloutFromCFMessage + 193
9 CoreFoundation 0x339605db __CFMachPortPerform + 119
10 CoreFoundation 0x3396b173 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 35
11 CoreFoundation 0x3396b117 __CFRunLoopDoSource1 + 139
12 CoreFoundation 0x33969f99 __CFRunLoopRun + 1385
13 CoreFoundation 0x338dcebd CFRunLoopRunSpecific + 357
14 CoreFoundation 0x338dcd49 CFRunLoopRunInMode + 105
15 GraphicsServices 0x33f222eb GSEventRunModal + 75
16 UIKit 0x3596a2f9 UIApplicationMain + 1121
17 0x00005233 main (main.m:14)
Ответы
Ответ 1
У меня была такая же авария. Это оказалось потому, что мы анимировали контроллер с помощью [controller setContentOffset: newPt animated: YES], и мы реализовали метод делегирования scrollViewDidScroll на контроллере. Нажатие кнопки на экране позволяет перейти на другой контроллер, поэтому, если пользователю удастся щелкнуть по кнопке во время анимации, мы попали бы в исходную поломку. Решение состоит в том, чтобы просто делегировать делегат в noalloc.
Ответ 2
Сигнал SIGSEGV
отправляется процессу, когда он делает неверную ссылку на виртуальную память или ошибку сегментации. (см. Wikipedia)
Итак, вы получаете доступ к объекту, который, вероятно, был выпущен. Как это во время анимации, может быть, вы определили селектор, который будет вызываться после завершения анимации или что-то в этом роде? Это было бы, если бы я начал искать.
Ответ 3
Вы можете взглянуть на этот поток: Есть ли способ отменить анимированный UITableView/UIScrollView setContentOffset: анимированный:?
Это обсуждение предполагает, что это может быть делегат, который dealloc'd до того, как scrollview отправит сообщение о завершении анимации.