Ios Swift-从委托中展开可选值调用变量时意外发现nil

Ios Swift-从委托中展开可选值调用变量时意外发现nil,ios,swift,delegates,null,optional-values,Ios,Swift,Delegates,Null,Optional Values,我正在尝试创建我的第一个iOS应用程序 当我试图从我的委托视图控制器访问变量时,出现了这样一个错误“在展开可选值时意外地发现了nil” class SearchStationViewController: UITableViewController, writeValueBackDelegate { var selectedStation: String! var fromStationValue: String! = "None" override func view

我正在尝试创建我的第一个iOS应用程序

当我试图从我的委托视图控制器访问变量时,出现了这样一个错误“在展开可选值时意外地发现了nil”

class SearchStationViewController: UITableViewController, writeValueBackDelegate {
    var selectedStation: String!
    var fromStationValue: String! = "None"

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        selectedStation = stations[indexPath.row].StationName
        fromStationValue = selectedStation

        let vc = SelectedStationViewController()
        vc.fromStationValue = self.fromStationValue
        vc.delegate = self

        self.dismissViewControllerAnimated(true, completion: nil)
    }
}
我正在尝试获取一个按下的单元格值,以便在目标控制器上设置为标签文本

class SearchStationViewController: UITableViewController, writeValueBackDelegate {
    var selectedStation: String!
    var fromStationValue: String! = "None"

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        selectedStation = stations[indexPath.row].StationName
        fromStationValue = selectedStation

        let vc = SelectedStationViewController()
        vc.fromStationValue = self.fromStationValue
        vc.delegate = self

        self.dismissViewControllerAnimated(true, completion: nil)
    }
}
这是第一个控制器

class SearchStationViewController: UITableViewController, writeValueBackDelegate {
    var selectedStation: String!
    var fromStationValue: String! = "None"

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        selectedStation = stations[indexPath.row].StationName
        fromStationValue = selectedStation

        let vc = SelectedStationViewController()
        vc.fromStationValue = self.fromStationValue
        vc.delegate = self

        self.dismissViewControllerAnimated(true, completion: nil)
    }
}
和目标控制器,我希望它的label.text被更改

protocol writeValueBackDelegate {
    var fromStationValue: String! {get set}
}

class SelectedStationViewController: UITableViewController {
    @IBOutlet weak var stationFrom: UILabel!
    var delegate: writeValueBackDelegate! = nil
    var fromStationValue: String! = "None"

    override func viewDidLoad() {
        super.viewDidLoad()

        stationFrom.text = fromStationValue        
    }
}

所以我只想参考我今天早些时候给出的答案:

您必须使用相应的xib oder序列图像板初始化控制器。例如:

let storyboard = UIStoryboard(name: "myStoryboardName", bundle: nil);
let vc = storyboard.instantiateViewControllerWithIdentifier("myVCID") as UIViewController;
(来自)


否则,您的视图控制器将不知道任何出口,它们将为零。

错误到底是什么?你的问题缺乏细节。我假定您必须从故事板而不是直接实例化视图控制器,并且您的IBOutlet为nil。当我试图将标签“stationFrom”设置为从第一个viewcontroller检索到的新值“fromStationValue”时,错误显示为“在展开可选值时意外发现nil”。很抱歉,我无法理解您的视图层次结构。选择电台时,是否先显示
SearchStationViewController
,然后再显示
SelectedStationViewController
?按照现在的方式,委托/协议用于将数据从
SelectedStationViewController
传递到
SearchStationViewController
,而不是相反。