1

最初の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];
                    }
                }

            }

        }

    }
}
4

0 に答える 0