最初のView Controllerには、2番目のView Controllerのプッシュを呼び出すibactionにリンクされたボタンがあります。2 番目のビュー コントローラーでは、ボタンがビュー コントローラーを最初のビュー コントローラーにポップします。ときどきポップすると、「-[Secondviewcontroller isKindOfClass:]: 割り当て解除されたインスタンス 0xb181c00 にメッセージが送信されました」というエラーでアプリがクラッシュします。
これは、2番目のプッシュの最初のView Controllerのコードです(インストゥルメントでは、ゾンビを使用すると、このメソッドでゾンビメッセージが表示されます)。
-(void)apriCassettoRivista {
[NSObject cancelPreviousPerformRequestsWithTarget:self];
Secondviewcontroller *rivista = [[Secondviewcontroller alloc] init];
[self.navigationController pushViewController:rivista animated:true];
}
検出されたエラーは、2 番目のビュー コントローラーをプッシュするメソッドにあります。これは理解できません。問題は2番目のView Controllerにあると思います..可能ですか?2 番目にポップするときは、次のコードを使用します。
-(IBAction)indietro:(id)sender {
[NSObject cancelPreviousPerformRequestsWithTarget:self];
[self.navigationController popViewControllerAnimated:TRUE];
}
誰でも私を助けることができますか?ここにゾンビメッセージの画面があります: http://vincentvega.net/iphone/schermo.png
私の2番目のコントローラーにもobserverがありますが、ビューでそれらを破壊すると、secondviewcontrollerが消えます。
更新 いくつかのテストの後、CATiledLayer 内の CGPDFPageRef のレンダリングによって問題が発生していることを検出しました。この機能を無効にすると、アプリがクラッシュすることはありません。
解決済み 解決策は、この関数を使用して、スクロールビューのすべてのuiview catiledlayer のデリゲートを nil に設定していました:
-(void)buttavia {
NSArray *subviews = [mainScrolla subviews];
for (UIView *subview in subviews) {
if ([subview isKindOfClass:[UIScrollView class]]) {
// Ho uno scrolla
//
NSArray *subviewsScrolla = [subview subviews];
for (UIView *subviewScrolla in subviewsScrolla) {
if ([subviewScrolla isKindOfClass:[UIView class]]) {
// Ho una view nello scrolla
//
if (subviewScrolla) {
((CATiledLayer *)subviewScrolla.layer).delegate = nil;
((CATiledLayer *)subviewScrolla.layer).contents = nil;
[subviewScrolla removeFromSuperview];
[subviewScrolla.layer removeFromSuperlayer];
}
}
}
}
}
}