この問題はライフサイクルの問題だと思います。アプリはメモリ警告を受け取り、いくつかのユーザー インターフェイス項目をアンロードしようとします。しかし、スタック トレースで最後に報告された項目のコンテキストでエラーを解釈する方法を 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];
}
スタックを調べたときに気づいたことの 1 つは[super viewDidUnload]
、コードの最初の行として呼び出されていたことです。それで、すべての「荷降ろし」作業を行った後、それを一番下に移動しました。これが本当に重要かどうかにかかわらず、オンラインで意見の相違があるようです.スーパークラスのメソッドは何もしないというSOの回答viewDidUnload
もあります.そのため、最初または最後に呼び出すかどうかは問題ではありません.
そのため、その変更を行いましたが、このエラーを再現できなかったため、実際の修正かどうかはわかりません。私の推論が正しいかどうかを確認するために、問題についてより多くの意見を得たいと思っていました。