У меня есть приложение с обратными вызовами для записи и воспроизведения звука. Из записи обратного вызова я вызываю функцию для обновления GUI:
[mainViewController performSelectorOnMainThread:@selector(updateGuiAfterOnset) withObject:nil waitUntilDone:NO];
Работает нормально, но после того, как я отправляю приложение в фоновый режим (с помощью кнопки home
на устройстве) и снова открываю его, приложение вылетает после 2-го вызова updateGuiAfterOnset
и, в частности, после вызова :
[myUIImageView setImage:myUIImage];
Единственное, что я делаю в applicationWillResignActive
и applicationDidBecomeActive
, это остановка и запуск audioUnit:
AudioOutputUnitStop(audioUnit);
и
AudioOutputUnitStart(audioUnit);
Моя интуиция заключается в том, что некоторая переменная запуталась во время процесса перехода к фону / переднему плану, но это только предположение.
Есть идеи? Есть ли какие-либо рекомендуемые вещи, которые мне нужно сделать при переходе в фоновый режим в многопоточном приложении?
EDIT Приложение также аварийно завершает работу, если метод gui-update-method вызывается из основного потока (при нажатии кнопки).
Соответствующая часть из отчета о сбое:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000008
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x000027d8 objc_msgSend + 16
1 UIKit 0x00009738 -[UIImageView setImage:] + 140
2 TimeKeeper 0x00002b7a -[MainViewController updateGuiAfterOnset] (MainViewController.m:89)
3 CoreFoundation 0x0003e2e4 -[NSObject(NSObject) performSelector:withObject:] + 16