0

私は 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スレッドで呼び出そうとしました-違いはありません。

私は何を間違っていますか?

ありがとうございました!!!

4

2 に答える 2