2017-06-25 6 views
1

enter image description here[スウィフト3.0のXcode]

注:質問は私の問題をより明確にする試みで編集されています。

ねえ、複数のVCSでデータを受け渡ししようとしています。私はV2 - > V3とV3 - > V1のデータ(配列)を渡したいと思いますが、V1 - V2 - V3とV3 - V2 - V1のようにVCだけをナビゲートできるようにします。 私が学ぶ必要があるのは、別のVCにナビゲートせずにデータを渡す方法と、V2 - > V3とV3 - > V1の間でデータを渡す2つの準備メソッドを設定しながら、すべてのVC間をナビゲートできることです。最初の準備を作成するとき、致命的なエラーを表示せずに、他のVCにナビゲートするためにVCに関連付けられた他のセグを使用できません。 誰でも助けてくれますか? すべての入力をいただければ幸いです!

HERESに私の試み:

if let firstController = segueMVH.destination as! FirstViewController { 
    // Set first view controller's data 

} else if let secondController = segueMVH.destination as! SecondViewController { 
    // Set second view controller's data 

} else if let thirdController = segueMVH.destination as! ThirdViewController { 
    // Set third view controller's data 
} 

注:あなたは、コントローラのセグエが行われようとしているどのビューをチェックする必要があり

import UIKit 

class ViewController: UIViewController { 
var name = String() 
var StopButInfo = [String]() 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
    } 


} 


    import UIKit 

    class SecondViewController: UIViewController { 

    var StringArray = [String]() 


override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 


@IBOutlet var PHeight: UITextField! 
@IBOutlet var PName: UITextField! 



@IBAction func Search(_ sender: Any) { 
    if PHeight.text != ""{ 
     performSegue(withIdentifier: "SearchSegue", sender: self)} 
    let CDstart = String(describing: Date()) 
    StringArray.append(CDstart) 
    StringArray.append(PName.text!) 
    StringArray.append(PHeight.text!) 
    } 




override func prepare(for SearchSegue: UIStoryboardSegue, sender: Any?){ 
    let thirdController = SearchSegue.destination as! ThirdViewController 
    thirdController.SearchButInfo = StringArray 
} 


override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
    } 


    } 

import UIKit 

class ThirdViewController: UIViewController { 
var height = String() 
var SearchButInfo = [String]() 

var StringArray = [String]() 



@IBAction func Stop(_ sender: Any) { 
    if StringArray.count != 0{ 
     performSegue(withIdentifier: "SegueToStart", sender: self) 
    } 
    let CDStop = String(describing: Date()) 
    StringArray.append(CDStop) 
    StringArray.append(height) 
} 





override func prepare(for SegueToStart: UIStoryboardSegue, sender: Any?){ 
    let firstController = SegueToStart.destination as! ViewController 
    firstController.StopButInfo = StringArray} 





override func viewDidLoad() { 
    super.viewDidLoad() 


    // Do any additional setup after loading the view. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


    } 
+0

どのようなエラーが発生していますか、どのコード行にありますか?壊れたコード行を投稿できますか?また、エラーメッセージ –

+0

スレッド1:信号 'SIGABRT 'を' let secondController = segueMVH.destination as line! ThirdViewController'エラーメッセージ "HC.ViewController '(0x107b33ec0)の型を' HC.ThirdViewController '(0x107b33f48)にキャストできませんでした。 –

答えて

0

が、これはprepare(for segueMVH: UIStoryboardSegue, sender: Any?)メソッド内で、次のように行うことができますそれは良いでしょうそれらを区別するために、各セグのために異なる識別子を使用する。

0

にあるエラーは、HC.ViewControllerThirdViewControllerにケーピングしていると言っているため、失敗しています。これは、segueの宛先ビューコントローラがThirdViewControllerではないことを意味します。

segueの理解にさらに役立てるために、segueはソースビューコントローラとデスティネーションビューコントローラ間の接続であり、2つの間でのみ使用できます。この写真を参照してください enter image description here この場合、私は私のストーリーボードにVC1のボタンとVC2の間に接続されたセグの接続を持っています。この場合、私のボタンをクリックするとこのセグがトリガーされ、prepare(for segue)メソッドはVC1にしかデータを渡すことができません。

あなたの状況では、あなたのセグの宛先はThirdViewControllerだと思われますが、実際はそうではありません。だからあなたの現在のビューコントローラとThirdViewControllerの間に接続されているかどうかを確認する識別子segueMVHでsegueを確認してください。

希望する

関連する問題