我已经能够将数据从一个视图传递到下一个视图。
现在我需要扩展一下并通过三个视图控制器传递这些数据。
我有三个视图控制器1.MileageControler,2.LocationsControler和3.LocationChoiceController。
我需要能够将数据从1传递到2然后传递到3然后再传回到2。
Mileage Controler有一个文本框和一系列数字按钮,允许用户输入里程。一个Enter按钮在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 = ""
}
}
LocationController有:
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"
}
}
}
所以在这里我试图再次将数据传递到下一个视图(LocationChoice),用户将根据该位置选择一个位置并根据传递的senderToPass值,然后将存储所选位置并将其传回startLocationToPass或endLocationToPass。仅存储并传回的LocationChoice中的mileageToPass和fuelAmmountToPass不会更改。
我遇到的问题是错误,只是显示为......线程1:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)我是以错误的方式解决这个问题....
答案 0 :(得分: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
答案 1 :(得分:0)
您正确使用-prepareForSegue:sender:
。你的情况非常简单,所以你可以像你一样设置值,这很棒。
提供的错误消息非常通用"发生了非常糟糕的事情",并且没有回溯可供使用。如果您还没有其他信息,我建议您在-prepareForSegue:sender:
方法中设置一个断点,然后逐行踩踏,直至崩溃。
顺便说一句,我建议将你传递给模型对象的4个值(包含4个不可变值)包装起来并传递它。