Сбой после закрытия UIViewController
Вскоре у меня возникла проблема с моим приложением, которое, как только я закрываю определенный UIViewController, завершает работу приложения с Tread 1: точка останова 1.1 7.1.
Я сузил проблему до "Контейнерного представления", которое помещено в представление, которое отклонено. Я заметил, что сначала освобождается главный контроллер и контроллер представления контейнера, но не вижу, в чем проблема. Я не уверен, когда эта проблема появилась, поскольку я несколько дней работал над конкретными проблемами интерфейса и никогда не использовал опцию "перейти назад".
Я знаю, что приведенное выше описание очень расплывчато, но любые предложения о том, как отладить возможную причину, будут очень приветствоваться, поскольку я потратил на это часы на этом этапе.
#0 0x00000001954440a8 in objc_exception_throw ()
#1 0x0000000184d05d88 in +[NSException raise:format:] ()
#2 0x0000000185b59f00 in NSKVODeallocate ()
#3 0x0000000184be5378 in CFRelease ()
#4 0x0000000184bf1938 in -[__NSArrayM dealloc] ()
#5 0x000000019545d724 in (anonymous namespace)::AutoreleasePoolPage::pop(void*) ()
#6 0x0000000184be8f94 in _CFAutoreleasePoolPop ()
#7 0x0000000184cbb750 in __CFRunLoopRun ()
#8 0x0000000184be91f4 in CFRunLoopRunSpecific ()
#9 0x000000018dd775a4 in GSEventRunModal ()
#10 0x000000018951a784 in UIApplicationMain ()
#11 0x00000001000cdc04 in main at /Users/Luuk/Documents/Xcode development/idoms-portal/iDoms/main.m:14
#12 0x0000000195ab2a08 in start ()
РЕДАКТИРОВАТЬ: я сузил его до связывания контейнера с контроллером представления:
@interface DOPrototypeViewController : UIViewController <DOContentSizeCallback> {
@protected
DOMediaPlayerHelper* _mediaPlayerHelper;
__weak NSString* _viewTitle;
IBOutlet UIBarButtonItem *_previousPageBttn;
IBOutlet UIBarButtonItem *_nextPageBttn;
__weak IBOutlet UIView* _contentContainer;
__weak IBOutlet UIScrollView* _scrollView;
}
@property (nonatomic, weak) NSString* viewTitle;;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *contentViewHeightConstraint;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *contentViewWidthConstraint;
Как только контейнер в IB связан, проблема возникает. Как упомянуто выше, кажется, что DOPrototypeViewController выгружается в первую очередь, до контроллера contentContainer. Это должно быть как-то связано со ссылкой на родительское представление contentContainer, которое я чувствую.
2 ответа
Это была ссылка. Я добавил наблюдателя [[self view] addObserver:self forKeyPath:@"frame" options:0 context:nil]; в двух контроллерах, и пока я исправил один, ни разу не увидел второй и не убрал его.
У меня были подобные сбои раньше. Обычно сообщение отправляется объекту, который A: больше не существует. B: не распознает селектор.
Начните с просмотра трассировки стека. Посмотрите, какие последние пару звонков были прямо перед аварией. Обычно это указывает на правильное направление.
Кроме того, разместите журнал сбоев и трассировки стека здесь, если вы застряли.