2016-04-08 19 views
0

あるビューから次のビューにデータを渡すことができました。一連のビューコントローラとの間でデータをやりとりする方法

今私はビットを拡張し、3つのビューコントローラ経由でこのデータを渡す必要があります。

私は3つのビューコントローラ1.MileageControler、2.LocationsControler、および3.LocationChoiceControllerを持っています。

I 3上を1から2にデータを渡すことができる必要があり、その後、バック2.

マイレージのcontrolerは、テキストボックスと、ユーザが走行距離を入力することを可能にする数字ボタンのシリーズを持っている。

EnterボタンをLocationControllerがありseque

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier == "segueLocationView") { 
     let passingData = segue.destinationViewController as! LocationViewController; 

     passingData.mileageToPass = DisplayStart.text 
     passingData.fuelAmountToPass = 0.00 
     passingData.startLocationToPass = "HOME" 
     passingData.endLocationToPass = "" 
    } 
} 

で次のように渡さ:

var mileageToPass: String! 
    var fuelAmountToPass: Double! 
    var startLocationToPass: String! 
    var endLocationToPass: String! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     labelStartMileage.text = "Start Mileage for this trip: " + mileageToPass 
     labelStartLocation.text = startLocationToPass 
     labelEndLocation.text = endLocationToPass 
} 

また、だからここに私は上のデータを渡すためにしようとしている...

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 

    if (segue.identifier == "segueChoiceMade") { 

     let passingData = segue.destinationViewController as! LocationChoiceViewController; 

     passingData.mileageToPass = mileageToPass 
     passingData.fuelAmountToPass = fuelAmountToPass 
     passingData.startLocationToPass = labelStart.text 
     passingData.endLocationToPass = txtEndLocation.text 

     if (sender === but_StartLocation) { 
      passingData.senderToPass = "Start" 
     } else if (sender === but_Destination) { 
      passingData.senderToPass = "End" 
     } 

    } 
} 

を持っていますユーザが位置を選択し、どのsenderToPass値が渡されたかに基づいて、選択された位置が格納され、startLocationToPassまたはendLocationToPassのいずれかに戻される次のビュー(LocationChoice)に再び送られる。 mileageToPassとfuelAmmountToPassは、格納されて戻ったLocationChoiceでは変更されません。

私がいる問題は、同じように...スレッド1に表示されるエラー:EXC_BAD_INSTRUCTION(コード= EXC_I386_INVOP、サブコード= 0x0の)私はこれについて間違った道を進んアム....

+0

UINavigationControllerを使用してこのデータを渡すことができます。最初のVCにnavコントローラを追加し、サブクラス化し、いくつかのデータプロパティを追加して使用してください。 –

答えて

2

ます。興味のあるデータの集合を保持するために、このような

何か新しいシングルトンクラスを作成することができます。あなたが得ることができるあなたのビューコントローラで次に

import Foundation 

class Data: NSObject { 

    static let sharedData = Data() 

    var mileage: String? 
    var fuelAmount: Int? 
    var startLocation: String? 
    var endLocation: String? 
} 

をし、同じような値を設定します。

// Set fuel amount in one view controller 
Data.sharedData.fuelAmount = 0.00 

// And retrieve it in another 
let fuelAmount = Data.sharedData.fuelAmount 
0

正しく-prepareForSegue:sender:を使用しています。あなたのケースはかなりシンプルなので、あなたが行っているような値を設定することができます。これは素晴らしいことです。

提供されるエラーメッセージは、かなり一般的な「何かが本当に悪い」ということです。作業するバックトレースはありません。これ以上の情報がない場合は、-prepareForSegue:sender:メソッドでブレークポイントを設定し、クラッシュするまで1行ずつステッピングすることをお勧めします。

あなたが渡している4つの値をモデルオブジェクト(4つの不変の値を持つ)にラップし、その周りを単に渡すことをお勧めします。

関連する問題