Я предполагаю, что это проблема жизненного цикла. Приложение получает предупреждение о памяти и пытается выгрузить некоторые элементы пользовательского интерфейса. Но я не уверен на 100%, как интерпретировать ошибку в контексте последнего сообщенного элемента в трассировке стека.
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0xa0d9f968
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x361dc026 objc_msgSend_stret + 18
1 TheApp 0x000b4d31 -**[TheAppFeedController removeAdView]** (TheAppFeedController.m:**189**)
2 TheApp 0x0000d68d -[TheAppViewController viewDidUnload] (TheAppViewController.m:177)
3 TheApp 0x000b4a63 -[TheAppFeedController viewDidUnload] (TheAppFeedController.m:137)
4 UIKit 0x32e66a37 -[UIViewController unloadViewForced:] + 251
5 UIKit 0x32fae3ad -[UIViewController purgeMemoryForReason:] + 65
Таким образом, трассировка стека указывает на этот метод, который на самом деле не имеет смысла, почему он вызывает эту ошибку.
-(void) removeAdView {
[super removeAdView];
[self fixLayoutForAdRemoval:self.tableView];
}
Когда вы просматриваете стек, я заметил одну вещь: [super viewDidUnload]
вызывается как первая строка кода. Поэтому я переместил его в самый низ, после того как проделал всю свою "разгрузочную" работу. Кажется, в Интернете есть некоторые разногласия, действительно ли это имеет значение или нет, некоторые ответы SO говорят, что метод viewDidUnload
суперкласса ничего, и поэтому не имеет значения, назовете ли вы это в начале или в конце.
Итак, я внес это изменение, но, поскольку мне никогда не удавалось воспроизвести эту ошибку, я не уверен, что это на самом деле исправление. Хотел узнать больше мнений по проблеме, чтобы убедиться, что мои рассуждения верны.
[super viewDidUnload]
сбой был исправлен; Если вы восстановите его как первую строку, произойдет сбой; это то, что вы говорите? - person sergio   schedule 24.10.2012TheAppFeedController.m line 189
? - person Joachim Isaksson   schedule 24.10.2012removeAdView
: - / - person Joel Martinez   schedule 24.10.2012