正在发送到新的视图控制器的数据是零,展开一个可选值
当我尝试传递我的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
,所以没有分配。
所以你需要首先初始化eventDetailscontrollers
variables。
我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) }