0

2 つのビュー コントローラーを切り替えるとクラッシュします。基本的に、レイアウトは次のようになります --> 右にスワイプして、上部のビュー コントローラーの下にある左側のメニュー ビューを表示します --> アプリを起動すると、最初に認証がチェックされ、UIAlertView から応答が返されると表示されます。認証されていないことを識別するためのサーバー。

認証部分で右にスワイプして下の左メニュー ビュー コントローラーを表示し、それを選択して、上部のビュー コントローラーが戻る前に新しいビュー コントローラーを起動すると、2 番目のビュー コントローラーが読み込まれますが、その上に UIAlertView が表示されます。すでにオフになっているトップビューコントローラー用の画面。そのため、ボタンをクリックしてその UIAlertView を閉じると、アプリがクラッシュします。クラッシュ スレッド 0 は次のとおりです。

    Thread 0 name:  Dispatch queue: com.apple.main-thread
    Thread 0 Crashed:
    0   libobjc.A.dylib                 0x3bcc75b0 objc_msgSend + 16
    1   UIKit                           0x35f03c4c -[UIAlertView(Private) _buttonClicked:] + 292
    2   UIKit                           0x35e970c0 -[UIApplication sendAction:to:from:forEvent:] + 68
    3   UIKit                           0x35e97072 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 26
    4   UIKit                           0x35e97050 -[UIControl sendAction:to:forEvent:] + 40
    5   UIKit                           0x35e96906 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 498
    6   UIKit                           0x35e96dfc -[UIControl touchesEnded:withEvent:] + 484
    7   UIKit                           0x35dbf5ec -[UIWindow _sendTouchesForEvent:] + 520
    8   UIKit                           0x35dac7fc -[UIApplication sendEvent:] + 376
    9   UIKit                           0x35dac116 _UIApplicationHandleEvent + 6150
    10  GraphicsServices                0x37ac45a0 _PurpleEventCallback + 588
    11  GraphicsServices                0x37ac41ce PurpleEventCallback + 30
    12  CoreFoundation                  0x33f79170 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 32
    13  CoreFoundation                  0x33f79112 __CFRunLoopDoSource1 + 134
    14  CoreFoundation                  0x33f77f94 __CFRunLoopRun + 1380
    15  CoreFoundation                  0x33eeaeb8 CFRunLoopRunSpecific + 352
    16  CoreFoundation                  0x33eead44 CFRunLoopRunInMode + 100
    17  GraphicsServices                0x37ac32e6 GSEventRunModal + 70
    18  UIKit                           0x35e002fc UIApplicationMain + 1116
    19  iShame                          0x000bbe90 main (main.m:16)
    20  libdyld.dylib                   0x3c103b1c start + 0

これは、トップ ビュー コントローラーでの私の dealloc メソッドです。これは、それらを nil に設定することで問題を解決すると思います。

    - (void)dealloc
    {
        noConnection = nil;
        userSetup = nil;
        userExist = nil;
        accountAlertView = nil;
        confirmed = nil;
        login = nil;

        if (_connection)
        {
            [_connection cancel];
            [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
            [MBProgressHUD hideHUDForView:self.view animated:YES];
        }
    }

これでどこに行くべきかについての方向性は大歓迎です。私が今考えることができる唯一のことは、ユーザー認証ステータスでサーバーから通知が返されるまで、メニューを表示するスワイプアクションとメニューボタンを基本的に無効にすることです. アイデアをお願いします。

潜在的な回避策:

    - (void)dealloc
    {
        [noConnection dismissWithClickedButtonIndex:0 animated:YES];// = nil;
        [userSetup dismissWithClickedButtonIndex:0 animated:YES]; //= nil;
        [userExist dismissWithClickedButtonIndex:0 animated:YES]; //= nil;
        [accountAlertView dismissWithClickedButtonIndex:0 animated:YES]; //= nil;
        [confirmed dismissWithClickedButtonIndex:0 animated:YES]; //= nil;
        [login dismissWithClickedButtonIndex:0 animated:YES]; //= nil;

        if (_connection)
        {
            [_connection cancel];
            [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
            [MBProgressHUD hideHUDForView:self.view animated:YES];
        }
    }
4

2 に答える 2

0

はい、あなたは正しいです。認証中にサーバーから応答を受け取るまで、トップ ビュー コントローラーのスワイプ アクションを無効にします。応答に基づいて、スワイプ アクションを 1 回有効にします。

于 2013-04-28T06:00:27.763 に答える
0

これで問題は解決し、クラッシュすることはなくなりました。

- (void)dealloc
{
    [noConnection dismissWithClickedButtonIndex:0 animated:YES];// = nil;
    [userSetup dismissWithClickedButtonIndex:0 animated:YES]; //= nil;
    [userExist dismissWithClickedButtonIndex:0 animated:YES]; //= nil;
    [accountAlertView dismissWithClickedButtonIndex:0 animated:YES]; //= nil;
    [confirmed dismissWithClickedButtonIndex:0 animated:YES]; //= nil;
    [login dismissWithClickedButtonIndex:0 animated:YES]; //= nil;

    if (_connection)
    {
        [_connection cancel];
        [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
        [MBProgressHUD hideHUDForView:self.view animated:YES];
    }
}
于 2013-04-29T14:14:11.007 に答える