UIViewController yang disajikan tidak dapat menampilkan UIAlertController

Ketika tombol kirim diklik di aplikasi saya, SubmitViewController ditampilkan di pengontrol tampilan aktif untuk menampilkan kemajuan unggahan.

Ketika pemberitahuan kesalahan diterima, pemberitahuan kesalahan akan ditampilkan dan ditutup sendiri.

Masalahnya adalah tidak ada Peringatan yang ditampilkan karena self.navigationController sama dengan nil. Bagaimana cara menampilkan Peringatan dalam kasus tersebut?

Saya tidak dapat menggunakan storyboard untuk membuat instance SubmitViewController seperti yang disarankan beberapa orang, karena ini bukan bagian dari storyboard.

Pengontrol tampilan yang digunakan untuk menyajikan SubmitViewController:

-(void)submitBtnClicked:(id)sender {
    SubmitViewController *submitViewController = [SubmitViewController new];
    [self.navigationController presentViewController:submitViewController animated:YES completion:nil];
}

SubmitViewController.swift:

@objc func submitErrorNotification(_ notification:Notification) {
    self.unsubscribe()

    let title:String = notification.userInfo!["title"] as! String
    let message:String = notification.userInfo!["message"] as! String

    let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
    alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))

    if (self.navigationController == nil) {
        NSLog("Error: navigation controller is nil");// THIS error occurs
    }

    self.navigationController?.present(alertController, animated: false, completion: nil)

    self.dismiss(animated: false, completion: nil)
}

person Peter G.    schedule 02.10.2018    source sumber
comment
Mengapa Anda ingin menampilkan pengontrol peringatan pada pengontrol navigasi? Mengapa Anda tidak menyajikannya saja di instance SubmitViewController Anda dan mengabaikannya di pengendali tindakan   -  person Paulw11    schedule 02.10.2018
comment
@ Paulw11 itulah solusi saya sekarang. Saya perlu menyajikannya di pengontrol navigasi sehingga saya dapat mengabaikan pengontrol tampilan yang mendasarinya dan menggantinya dengan pengontrol tampilan lain.   -  person Peter G.    schedule 02.10.2018
comment
Maka Anda mungkin harus menggunakan pola delegasi sehingga pengontrol tampilan kirim dapat memberi tahu delegasi bahwa ada kesalahan dan delegasi dapat memutuskan apa yang harus dilakukan   -  person Paulw11    schedule 02.10.2018


Jawaban (1)


Mengapa Anda menggunakan kata kunci peringatan di:

[self.navigationController presentViewController:alert animated:YES completion:nil];

Coba ini :

SubmitViewController *myViewController = [SubmitViewController new];
    [self.navigationController presentViewController:myViewController animated:YES completion:nil];
person Mahesh Shahane    schedule 02.10.2018
comment
Hanya karena kesalahan, tidak ada hubungannya dengan masalah tersebut. - person Peter G.; 02.10.2018