2017-02-13 16 views
0

2つの異なるViewControllerに行くセグを持っています。詳細&検索。詳細に行くセグはうまくいきますが、検索に行くのはアプリをクラッシュさせてしまいます。私は同様の質問を読んで2時間を費やしているが、それらのどれもが同じ問題を持っているように見えるん:Xcode Segue "タイプの値をキャストできませんでした"

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    let detailVC = segue.destination as! DetailViewController 

    if segue.identifier == "newDocSegue" { 
     // Create a new document and pass it to the detail view. 
     detailVC.doc = Document() 
     detailVC.isAddAction = true 
    } 

    if segue.identifier == "editDocSegue" { 
     // Load the existing document into the detail view, for editing. 
     let indexPath = tableView.indexPath(for: sender as! UITableViewCell)! 
     detailVC.doc = Document[indexPath.row] 
     detailVC.isAddAction = false 
    } 
    else if segue.identifier == "searchSegue" { 
     shouldPerformSegue(withIdentifier: "searchSegue", sender: Any?.self) 
    } 

} 
+0

SeguesはTableViewControllerからViewControllersに移動します –

+2

shouldPerformSegue(withIdentifier: "searchSegue"、送信者:Any?.self)、なぜこの行がありますか? – raki

+0

あなたの2番目のif文にも 'else'がありません。 – Fonix

答えて

0

あなたの問題は

detailVC = segue.destinationのように聞かせています! DetailViewController

行。これは、すべてのVC(あなたの検索VCを含む)をDetailViewControllerとしてキャストしようとします。これを試してみてください:

let detailVC : UIViewController 

if segue.identifier == "newDocSegue" { 
    // Create a new document and pass it to the detail view. 
    detailVC = segue.destination as! DetailViewController 
    detailVC.doc = Document() 
    detailVC.isAddAction = true 
} 

if segue.identifier == "editDocSegue" { 
    // Load the existing document into the detail view, for editing. 
    detailVC = segue.destination as! ??? // not sure what type you want here 
    let indexPath = tableView.indexPath(for: sender as! UITableViewCell)! 
    detailVC.doc = Document[indexPath.row] 
    detailVC.isAddAction = false 
} 
else if segue.identifier == "searchSegue" { 
    detailVC = segue.destination as! SearchViewController 
    shouldPerformSegue(withIdentifier: "searchSegue", sender: Any?.self) 
} 
+0

ありがとう。これはそれに答えた。私はlet文を最初の2つのセグの中に移動しました。 –

0

あなたの問題はである:あなたが知っておく必要があり

if let detailVC = segue.destination as? DetailViewController 

:あなたの目的地のタイプがSearchViewControllerキャストがエラー

はこれを試してみてください原因となりますであれば

let detailVC = segue.destination as! DetailViewController 

as?およびas!

+0

これは意味があります。ありがとうございました。 –

関連する問題