正在发送到新的视图控制器的数据是零,展开一个可选值

当我尝试传递我的Event类的细节到另一个控制器时,我得到一个错误,说: "fatal error: unexpectedly found nil while unwrapping an Optional value"

这是我的视图控制器发送信息:

 var eventDetailscontrollers: EventDetailsController! func showDetailView(event: Events){ let mainStoryBoarrd: UIStoryboard = UIStoryboard(name:"Main", bundle:nil) let detailsViewController: UIViewController = mainStoryBoarrd.instantiateViewControllerWithIdentifier("eventDetailsID") eventDetailscontrollers?.event = event //this sends all info as nil eventDetailscontrollers.event = event //this causes error print(event.name) // this prints event name fine self.presentViewController(detailsViewController, animated: true, completion: nil) } 

这是我发送数据的类:

 var event: Events! { didSet { eventPriceLabel.text = event!.date //does nothing } } override func viewDidLoad() { super.viewDidLoad() let string = event?.name print(string)// prints null } 

我的活动课程:

 class Events: NSObject { var name: String! var date: String! var address: String! var ticketPrice: Int! 

你的问题是你正在声明variableseventDetailscontrollers ,如下所示:

 var eventDetailscontrollers: EventDetailsController! 

但是你永远不会为它分配一个价值,所以如果你打电话的话

 eventDetailscontrollers.event 

这会因为eventDetailscontrollers nil而崩溃,所以当时没有成员event

但是当你打电话

 eventDetailscontrollers?.event 

这不会崩溃,因为只有在eventDetailscontrollers不是nil的情况event才为event成员eventDetailscontrollers ,那就是感叹号的意思。 eventDetailscontrollers实际上是nil ,所以没有分配。

所以你需要首先初始化eventDetailscontrollersvariables。

我build议你阅读这个指南关于可选项 ,也是关于可选的链接

问题在这里:

 func showDetailView(event: Events){ let mainStoryBoarrd: UIStoryboard = UIStoryboard(name:"Main", bundle:nil) let detailsViewController: UIViewController = mainStoryBoarrd.instantiateViewControllerWithIdentifier("eventDetailsID") eventDetailscontrollers?.event = event //this sends all info as nil eventDetailscontrollers.event = event //this causes error print(event.name) // this prints event name fine self.presentViewController(detailsViewController, animated: true, completion: nil) } 

你有两个variables应该是相同的:

 func showDetailView(event: Events){ let mainStoryBoarrd: UIStoryboard = UIStoryboard(name:"Main", bundle:nil) eventDetailscontrollers = mainStoryBoarrd.instantiateViewControllerWithIdentifier("eventDetailsID") eventDetailscontrollers?.event = event //this sends all info as nil eventDetailscontrollers.event = event //this causes error print(event.name) // this prints event name fine self.presentViewController(eventDetailscontrollers, animated: true, completion: nil) }