2016-07-22 9 views
0

Eventクラスの詳細を別のコントローラに渡そうとすると、エラーが発生します。これは"fatal error: unexpectedly found nil while unwrapping an Optional value"です。新しいView Controllerにデータが送信されていて、オプションの値をアンラップしています。

これは、情報を送信し、私のビューコントローラである:

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! 
+0

'eventDetailscontrollers'が' eventDetailscontrollers?.event = event'でnilなのでです。 – WMios

+0

'eventDetailscontrollers'ですか? 'detailsViewController'は同じであるはずですか? – WMios

+0

はいそれらは同じビューコントローラです –

答えて

0

あなた問題は、変数eventDetailscontrollersを宣言していることです。これは次のようになります。

var eventDetailscontrollers: EventDetailsController! 

しかし、あなたは

eventDetailscontrollers.event 

を呼び出す場合eventDetailscontrollersnilなので、それはその時点で何のメンバーeventを持っていないので、これがクラッシュする理由ですので、あなたは、それに値を割り当てることはありません。

しかし、あなたは

eventDetailscontrollers?.event 

を呼び出すときにeventメンバーに値を代入しているので、これはクラッシュしませんeventDetailscontrollersnilない場合にのみ、それはその感嘆符が何を意味するかです。 eventDetailscontrollersは実際にはnilです。したがって、割り当てはmakeではありません。

最初にeventDetailscontrollers変数を初期化する必要があります。

私はあなたがoptionalsについてこのガイドを読むことをお勧めし、またこれを約optional chaining

+0

変数はどのように初期化されますか? –

+0

それはあなたがその変数をどのように使用するかによって異なります。 –

0

問題はここにある:

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) 
} 

あなたは同じであるべき二つの変数があります。

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) 
} 
関連する問題