2016-06-02 30 views
1

Ich bin in der Lage, eine Zeichenfolge eine Nachricht zwischen zwei Klassen erfolgreich zu übergeben, aber meine UIAlertAction zeigt die Nachricht nicht an.UIAlertAction zeigt keine übergebene Nachricht an

-Code sendet Nachricht

var message = String() 

Alamofire.request(.POST, endPoint, headers: Auth_header, parameters: parameters, encoding: .JSON) 
     .validate() 
     .responseJSON { 
     response in 

     switch response.result { 
     case .Success(let data): 
      let value = JSON(data) 
      if value["message"].string != nil { 
       message = String(value["message"]) 
       let dic = ["message": message] 
       print("hello") 
       NSNotificationCenter.defaultCenter().postNotificationName("notification",object: nil, userInfo: dic) 
      } 

      onCompletion() 

     case .Failure(let error): 
      print("Request failed with error: \(error)") 
      onError?(error) 
     } 

-Code Empfangen und Anzeigen Nachricht

import UIKit 

class TaskDetailsViewController: UIViewController { 


@IBAction func submitBtn(sender: AnyObject) { 
    loadTasks() 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(TaskDetailsViewController.displayMessage(_:)), name: "notification", object: nil) 

} 

func displayMessage(notification: NSNotification) { 

    if let message = notification.userInfo!["message"]{ 

     //initialize Alert Controller 
     let alertController = UIAlertController(title: "Success", message: message.string, preferredStyle: .Alert) 
     print(message) 
     print("world") 
     //Initialize Actions 
     let okAction = UIAlertAction(title: "Ok", style: .Default){ 
      (action) -> Void in 
      self.dismissViewControllerAnimated(true, completion: nil) 
     } 

     //Add Actions 
     alertController.addAction(okAction) 

     //Present Alert Controller 
     self.presentViewController(alertController, animated: true, completion: nil) 

    } 
} 

Mein Ausdruck

hello 
    Score created. 
world 

Output not shown

+0

was meinst du? Ist das Problem nicht bei der Methode, die die Warnung anzeigt, da die Nachricht problemlos übergeben werden kann? – noobdev

Antwort

1

Ich denke, Ihre message.string ist nil, wenn sie an UIAlertController übergeben. Überprüfen Sie es zweimal.

Drucken message nach dem Erhalten, damit Sie wissen, dass, was Sie darin erhalten.

Sie können Haltepunkte auch setzen, um zu prüfen, ob Sie Daten erhalten oder nicht.

1

Stellt sich heraus, ich brauche nur message.string-message as? String in meiner displaymessage Funktion

0

Im Erfolgsblock zu ändern:

case .Success(let data): 
     let value = JSON(data) 
     if let message = value["message"] as? String { 
      print("message")    
      let dic = ["message": message] 
      NSNotificationCenter.defaultCenter().postNotificationName("notification",object: nil, userInfo: dic) 
     } 

In Alarm-Controller Präsentation:

if let message = notification.userInfo!["message"] as? String { 

    //initialize Alert Controller 
    let alertController = UIAlertController(title: "Success", message: message, preferredStyle: .Alert) 
    print(message) 
    print("world") 
    //Initialize Actions 
    let okAction = UIAlertAction(title: "Ok", style: .Default){ 
     (action) -> Void in 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 

    //Add Actions 
    alertController.addAction(okAction) 

    //Present Alert Controller 
    self.presentViewController(alertController, animated: true, completion: nil) 

} 

Wenn es nicht kommt ist die Problem ist die Nachrichtenzeichenfolge ist Null oder die Nachrichtenzeichenfolge ist leere Zeichenfolge ("").

0

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(TaskDetailsViewController.displayMessage(_:)), name: "notification", object: nil) hat in func displayMessage(notification: NSNotification) wie sein:

func displayMessage(notification: NSNotification){ 
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(TaskDetailsViewController.displayMessage(_:)), name: "notification", object: nil) 
// Your code 
} 

Und dann entfernen Sie den Beobachter:

deinit{ 
NSNotificationCenter.defaultCenter().removeObserver 
}