2016-06-19 12 views
0

Ich bin nur neu zu schnellen iOS-Programmierung. Ich schreibe etwas Code. Einfach, ich möchte eine Warnung ausführen und dann über "performSegueWithIdentifier" zu einem anderen View-Controller wechseln. Aber ich habe diese Ausgabe:Versuch, UIViewController auf ViewController zu präsentieren, der bereits UIAlertController präsentiert

"Warnung: Versuch UIViewController zu präsentieren: 0x7fa05b72dd60 auf Kilaundry.ViewController: 0x7fa05b49a2c0 die bereits präsentiert UIAlertController: 0x7fa05d859d70"

ich denke, die Warnung nach diesem Code lautet: „NSOperationQueue .mainQueue(). addOperationWithBlock ".

Warum kann ich keine Warnung ausführen und dann mit "performSegueWithIdentifier" zu einem anderen View-Controller wechseln? Bitte helfen Sie mir zu finden, warum diese Warnung passiert.

Hier ist es meine Codes:

     if let data = data, let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary { 
          print(jsonResult) 

          Resp_code = jsonResult["Resp_code"] as? String; 
          Resp_message = jsonResult["Resp_message"] as? String; 

          if Resp_code == "01" { 
           NSOperationQueue.mainQueue().addOperationWithBlock { 
            let alert = UIAlertController(title: "Information", message:Resp_message!, preferredStyle: .Alert) 
            alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in }) 
            self.presentViewController(alert, animated: true){} 
            self.performSegueWithIdentifier("LoginSucceed", sender: self) 
           } 
          } else { 

           NSOperationQueue.mainQueue().addOperationWithBlock { 
           let alert = UIAlertController(title: "Oops!", message:"It seems "+Resp_message!, preferredStyle: .Alert) 
           alert.addAction(UIAlertAction(title: "OK", style: .Default) { _ in }) 
           self.presentViewController(alert, animated: true){} 
           } 
          } 
         } 
+0

Warum verwenden Sie die NSOperation-Warteschlange? Ich denke, dass Sie dipatch_get_main_queue() verwenden möchten, wenn Sie es für den Hauptthread verwenden möchten. : / – Dershowitz123

Antwort

3

Sie erhalten diesen Fehler, weil Sie einen Modal-View-Controller auf einem View-Controller zu präsentieren versuchen, auf dem bereits eine modale VC zeigt - Sie einen Alarm-Controller präsentieren, und dann sofort einen Übergang auslösen (der vermutlich auch modal ist). Ein View-Controller kann jeweils nur einen präsentierenden View-Controller haben. Der einfachste Weg, um das zu tun, was Sie wollen, ist, die 'OK'-Warnung auf der VC anzuzeigen, die durch den' LoginSucceeded'-Übergang dargestellt wird.

Allerdings würde ich noch einmal überdenken, ob Sie die Warnung überhaupt zeigen sollten. Ich schlage vor, Sie lesen die official Apple guidelines on the use of alerts - die im Grunde sagen "keine Warnung anzeigen, es sei denn, Sie müssen wirklich". Zeigen Sie insbesondere keine Benachrichtigungen an, um Benutzer darauf hinzuweisen, dass die App normal funktioniert. Das Anzeigen der Fehlermeldung, wenn Ihre Anfrage fehlschlägt, ist korrekt - eine Meldung bei erfolgreicher Anmeldung des Benutzers ist nicht erforderlich.