2016-05-25 3 views
2

私は、View Controller間でデータを送信するためにsegueの準備を使用しています。識別子が "ShowPost"の場合は最初の条件が働き、View ControllerにURLを送信します。しかし、識別子が "profileInfo"の場合、segueはデータを送信しません。segueが動作しないための準備の複数の条件

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 
     } 
    } 
    } 
} 

答えて

3

else文は最初のif文の内側に追加され、実行することはできません。

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

それが実行されることはありませんので、あなたelse文は、if文の内側です。

したがって、別のif文を別に入力してください。

インターフェイスビルダーから適切な識別子とクラスを設定していることを確認してください。

+0

それが働いたおかげで、今では、内部のブレークポイントにヒットされていません。indexPath = tableView.indexPathForSelectedRow { せた場合_userName = searchResults [indexPath.row] ["owner"] ["display_name"]。文字列値 –

+0

あなたが何を言おうとしていません。どこに打撃を与えないブレークポイントを置くのですか? – Lion

+0

このコード行から_userName = searchResults [indexPath.row] ["owner"] ["display_name"]。stringValue if letブロックの終わりまで、つまりdestinationController.ppImageString = _ppImageString –

0

多分それがスイッチと少し明確に次のようになります。

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

私はスイッチケースを使用する場合、私はその場合、文字列型の式パターンは "文字列"型の値と一致できません。 –

+0

私はそれを更新しました。あなたは '?? segue.identifier else {return} 'を使用し、' identifier'を使用して、 '' segue.identifier else''を呼び出します。代わりに – Daniel

+0

それはエラーを修正しましたが、それはヒットしないProfileInfoのケース内にブレークポイントを設定すると、まだ動作しません。 –

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 
       } 
      } 

    } 
関連する問題