2016-05-25 6 views
2

Ich benutze Vorbereitung für die Übertragung von Daten zwischen View-Controllern, Die erste if-Bedingung funktioniert, wenn die Kennung "ShowPost" und sendet die URL an die View-Controller. Wenn der Bezeichner jedoch "profileInfo" lautet, sendet das Segment keine Daten.Mehrere Bedingungen in Vorbereitung für den Übergang funktioniert nicht

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "ShowPost" { 
    if let indexPath = tableView.indexPathForSelectedRow { 
     let _url = searchResults[indexPath.row]["link"].stringValue 
     let destinationController = segue.destinationViewController as! ShowPostViewController 
     destinationController.url = _url 
    } 
    else if segue.identifier == "ProfileInfo" { 
     if let indexPath = tableView.indexPathForSelectedRow { 
     let _userName = searchResults[indexPath.row]["owner"]["display_name"].stringValue 
     // print("name dc: \(destinationController.userName)") 
     let _userId = searchResults[indexPath.row]["owner"]["user_id"].stringValue 
     let _userReputation = searchResults[indexPath.row]["owner"]["reputation"].stringValue 
     let _ppImageString = searchResults[indexPath.row]["owner"]["profile_image"].stringValue 
     let destinationController = segue.destinationViewController as! ProfileInfoViewController 
     destinationController.userName = _userName 
     destinationController.userId = _userId 
     destinationController.userReputation = _userReputation 
     destinationController.ppImageString = _ppImageString 
     } 
    } 
    } 
} 

Antwort

3

Die else-Anweisung wird innerhalb der ersten if-Anweisung hinzugefügt und kann nicht ausgeführt werden.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "ShowPost" { 
     if let indexPath = tableView.indexPathForSelectedRow { 
      let _url = searchResults[indexPath.row]["link"].stringValue 
      let destinationController = segue.destinationViewController as! ShowPostViewController 
      destinationController.url = _url 
     } 


    } 
    else if segue.identifier == "ProfileInfo" { 

      if let indexPath = tableView.indexPathForSelectedRow { 

       let _userName = searchResults[indexPath.row]["owner"]["display_name"].stringValue 
       // print("name dc: \(destinationController.userName)") 
       let _userId = searchResults[indexPath.row]["owner"]["user_id"].stringValue 
       let _userReputation = searchResults[indexPath.row]["owner"]["reputation"].stringValue 
       let _ppImageString = searchResults[indexPath.row]["owner"]["profile_image"].stringValue 
       let destinationController = segue.destinationViewController as! ProfileInfoViewController 
       destinationController.userName = _userName 
       destinationController.userId = _userId 
       destinationController.userReputation = _userReputation 
       destinationController.ppImageString = _ppImageString 


      } 
     } 

} 
1

Sie else Anweisung ist innerhalb if Anweisung so wird es nie ausgeführt werden.

Also, setzen Sie eine andere if-Anweisung.

Stellen Sie sicher, dass Sie den richtigen Bezeichner und die richtige Klasse im Interface Builder angegeben haben.

+0

Dank es hat funktioniert, aber jetzt ist es keine Bruchstelle innerhalb der Kollision mit: if lassen indexPath = tableView.indexPathForSelectedRow { let _userName = searchResults [indexPath.row] ["Besitzer"] ["Display_Name"]. stringValue –

+0

Nicht bekommen, was Sie versuchen zu sagen. wo bringst du einen Haltepunkt, der nicht geschlagen wird? – Lion

+0

aus dieser Zeile des Codes lassen Sie _userName = searchResults [indexPath.row] ["Besitzer"] ["Display_Name"]. StringValue an das Ende der if let Block ie destinationController.ppImageString = _ppImageString –

0

Vielleicht wäre es etwas klarer mit einem Schalter sein:

switch segue.identifier ?? "" { 
    case "ShowPost": 
     if let indexPath = tableView.indexPathForSelectedRow { 
      let _url = searchResults[indexPath.row]["link"].stringValue 
      let destinationController = segue.destinationViewController as! ShowPostViewController 
      destinationController.url = _url 
     } 
    case "ProfileInfo": 
     if let indexPath = tableView.indexPathForSelectedRow { 

      let _userName = searchResults[indexPath.row]["owner"]["display_name"].stringValue 
      // print("name dc: \(destinationController.userName)") 
      let _userId = searchResults[indexPath.row]["owner"]["user_id"].stringValue 
      let _userReputation = searchResults[indexPath.row]["owner"]["reputation"].stringValue 
      let _ppImageString = searchResults[indexPath.row]["owner"]["profile_image"].stringValue 
      let destinationController = segue.destinationViewController as! ProfileInfoViewController 
      destinationController.userName = _userName 
      destinationController.userId = _userId 
      destinationController.userReputation = _userReputation 
      destinationController.ppImageString = _ppImageString 
    } 
    default: break 
} 
+0

Wenn ich Schalterfall verwende, erhalte ich einen Fehler an den Fällen, die das sagen: Ausdruck Muster des Typs Zeichenfolge kann nicht Werte des Typs "String?" –

+0

Ich habe es aktualisiert, Sie können '?? "" um sicherzugehen, dass es eine Zeichenfolge ist, oder erzwinge es "segue.identifier!" oder setze eine Wache am Anfang der Funktion 'guard let identifier = segue.identifier else {return}' und benutze 'identifier' Stattdessen – Daniel

+0

Es wurde der Fehler behoben, aber es funktioniert immer noch nicht, wenn ich einen Haltepunkt innerhalb der ProfileInfo-Fall nicht getroffen. –

1
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "ShowPost" { 
      if let indexPath = tableView.indexPathForSelectedRow { 
       let _url = searchResults[indexPath.row]["link"].stringValue 
       let destinationController = segue.destinationViewController as! ShowPostViewController 
       destinationController.url = _url 
      } 
     } 
      else if segue.identifier == "ProfileInfo" { 
       if let indexPath = tableView.indexPathForSelectedRow { 
        let _userName = searchResults[indexPath.row]["owner"]["display_name"].stringValue 
        // print("name dc: \(destinationController.userName)") 
        let _userId = searchResults[indexPath.row]["owner"]["user_id"].stringValue 
        let _userReputation = searchResults[indexPath.row]["owner"]["reputation"].stringValue 
        let _ppImageString = searchResults[indexPath.row]["owner"]["profile_image"].stringValue 
        let destinationController = segue.destinationViewController as! ProfileInfoViewController 
        destinationController.userName = _userName 
        destinationController.userId = _userId 
        destinationController.userReputation = _userReputation 
        destinationController.ppImageString = _ppImageString 
       } 
      } 

    } 
Verwandte Themen