Предполагам, че този проблем е проблем на жизнения цикъл. Приложението получава предупреждение за паметта и се опитва да разреди някои елементи от потребителския интерфейс. Но не съм 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