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];
}
}