2016-06-25 19 views
0

Ich habe ein UIAlertController mit einem Textfeld, das Benutzern ermöglicht, einen Titel einzugeben, um eine Datei zu benennen, bevor die Daten an den Server gesendet werden. Das Back-End kann die Datei jedoch aus verschiedenen Gründen ablehnen, und es muss ein Fehler angezeigt werden. Wie kann ich den Fehler anzeigen, den ich vom Server im selben Alert-Controller erhalten habe, wo ich den Dateinamen eingegeben habe?Fehlerbehandlung mit UIAlertController

class FileController: UIViewController 
{ 

    var alertController: UIAlertController? 

    func savePressed() 
    { 
     createAlert() 
    } 

    func createAlert() 
    { 

     self.alertController = UIAlertController(title: "Save", message: "Name your file.", preferredStyle: .Alert) 

     let saveAsPublicAction = UIAlertAction(title: "Make Public", style: .Default) { (_) in 

     let fileTitle = self.alertController!.textFields![0] as UITextField 

      if fileTitle.text != "" 
      { 
       self.initiateSave(fileTitle.text!, share: true) 
      } 
     } 

     let saveAsPrivateAction = UIAlertAction(title: "Make Private", style: .Default) { (_) in 

      let fileTitle = self.alertController!.textFields![0] as UITextField 

      if fileTitle.text != "" 
      { 
       self.initiateSave(fileTitle.text!, share: false) 
      } 
     } 


     let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (_) in } 

     self.alertController!.addTextFieldWithConfigurationHandler { (textField) in 

      NSNotificationCenter.defaultCenter().addObserverForName(UITextFieldTextDidChangeNotification, object: textField, queue: NSOperationQueue.mainQueue()) { (notification) in 
      saveAsPrivateAction.enabled = textField.text != "" 
      saveAsPublicAction.enabled = textField.text != "" 
      } 
     } 

     self.alertController!.addAction(saveAsPublicAction) 
     self.alertController!.addAction(saveAsPrivateAction) 
     self.alertController!.addAction(cancelAction) 

     self.presentViewController(self.alertController!, animated: true, completion: nil) 


    } 
} 

func initiateSave(title:String?, share: Bool?) 
{ 
    //package file 
    initiatePost() 

} 

func initiatePost() 
{ 
    //Send file data to server. Receive any errors and handle 
} 

Antwort

1

Auf dem Server können Sie mehr Logik hinzufügen JSON Daten mit dieser Information zu senden.

Zum Beispiel:

{ 
    "success": true, 
    "message": "Data received sucessfully" 
} 

Wenn die Anforderung erfolgreich war, wenn nicht:

{ 
    "success": false, 
    "message": "There is an error" 
} 

Also, wenn Sie analysieren, dass JSON Sie würde überprüfen, ob success falsch ist, und zeigt die Fehlermeldung innerhalb der message Schlüssel.

+0

Das ist was ich mache. Ich frage mich, wie ich die Ergebnisse im selben Alarm-Controller anzeigen kann, wo ich den Dateinamen eingegeben habe. – Brosef

+0

@Brosef ok Ich sehe, was du meinst, dafür musst du 'self.presentViewController' erneut aufrufen – meda

+0

So erhalte ich den Fehler in der 'initiatePost'-Funktion und der Alarm-Controller ist immer noch vorhanden, wenn der Fehler empfangen wird. Wie zeige ich den Fehler im Alert-Controller an? – Brosef