私は iOS 開発は初めてなので、基本的な知識が欠けているように感じます。
サーバーからの情報を表示するビュー コントローラー (VC) があります。私の VC には 2 つの通知センター オブザーバーがあります。1 つはサーバーからの正常な応答用で、もう 1 つはエラー用です。
このようなオブザーバーを追加しました
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(getPlaceInfoFailed:)
name:kGetPlaceInfoRequestDidFailBlockNotification
object:nil];
エラーが発生した場合は、アラートを表示して前のビュー コントローラーに移動します。A
それらにビューコントローラーと名前を付けましょうB
。
ストーリーボードを使用しています。
私の問題は、UI に戻ったときにA
完全にめちゃくちゃになっていることです。ナビゲーション バーにはランダムなものがあり、テーブル ビューにはゴミがあります。最終的にアプリがクラッシュします。
VCを却下しようとした方法は次のとおりですB
- (void)getPlaceInfoFailed:(NSNotification *)notification {
dispatch_async(dispatch_get_main_queue(), ^{
//[self.navigationController popViewControllerAnimated:YES];
//[self dismissViewControllerAnimated: YES completion: nil];
//[self.presentingViewController dismissViewControllerAnimated: YES completion: nil];
//[self.presentedViewController dismissViewControllerAnimated: YES completion: nil];
//[self performSegueWithIdentifier:@"exitSegue" sender:self];
});
}
[self performSegueWithIdentifier:@"exitSegue" sender:self];
たとえば、ボタンアクションハンドラーでバージョンを呼び出すと、バージョンが機能します。
しかし、オブザーバーではありません:(ご覧のとおりperformSegue
、UIスレッドで呼び出そうとしました-違いはありません。
私は何を間違っていますか?
ありがとうございました!!!