2016-04-05 41 views
1

ユーザークラスには多くのユーザーデータが含まれています。連絡先アプリのように、私は誰かが連絡先カードを読み込んだ連絡先をタップするといいと思います。通常、私はprepareForSegueとStoryboard Segueを使ってString、Int、Arrayなどの値を渡しますが、User型の値を送信する方法はわかりません。送信側では、正しく設定しましたが、受信ビューを設定する方法がわかりません。ドットシンタックスを使用せずに各要素を個別に取得したいのは、(連絡先アプリのように)ユーザーが連絡先カードにフィールドを追加できるようにしたいからだ。私がする必要がある場合を除いて、私が渡す必要があるすべてのデータを入力します。セグのユーザータイプの値の受け渡し

Userクラス:

class User { 
    var firstName = "" 
    var lastName = "" 
    var email = "" 
    var birthday = "" 
    var team = "" 
    var schedule = "" 
    var service = "" 
    var position = "" 
    var phoneNumber = "" 
    var dateStarted = "" 
    var profileImgURL = "" 
    var notes = "" 

    init (firstName:String, lastName:String, email:String, birthday:String, team:String, schedule:String, service:String, position:String, phoneNumber:String, dateStarted:String, profileImgURL:String, notes:String) { 
     self.firstName = firstName 
     self.lastName = lastName 
     self.email = email 
     self.birthday = birthday 
     self.team = team 
     self.schedule = schedule 
     self.service = service 
     self.position = position 
     self.phoneNumber = phoneNumber 
     self.dateStarted = dateStarted 
     self.profileImgURL = profileImgURL 
     self.notes = notes 
    } 

送信者:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "SeeContactCardSegue" { 
     if let destVC = segue.destinationViewController as? ContactCardTVC { 
      if let indexPath = tableView.indexPathForSelectedRow { 
       let user = users[indexPath.row] 
       destVC.user = user 
      } 
     } 
    } 
} 

受信機:

var user:User = ??? 

私はほとんどの状況で取得され、ユーザーが初期化される必要があるというエラーを取得しますが、私はこれを初期化する方法がわかりません。何か不足していますか?

答えて

0

強制的に巻き戻します。それは正常に動作するはずです。

var user:User!

+0

ありがとうございます!なぜ私はそれを考えなかったのか分からない。 –

+0

はすべての人に起こります。 :-) – Abhishek729

0

モーダルセグを使って別のビューを表示している場合、destinationViewControllerがコントローラではないUINavigationControllerであるという同じ問題が発生したような気がします。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)  { 
    if segue.identifier == "SeeContactCardSegue" { 
     let nav = segue.destinationViewController as! UINavigationController 
     let cardContactVC = nav.topViewController as! ContactCardTVC 
      if let indexPath = tableView.indexPathForSelectedRow { 
       let user = users[indexPath.row] 
       cardContactVC.user = user 
      } 

    } 
} 
:私の仮定は、あなたのdestinationViewControllerは、あなたのコードは次のようになるはずですUINavigationControllerであることを正しければ第一は、あなたが実際に if let destVC = segue.destinationViewController as? ContactCardTVCブロックになるだろうデバッガで確認し segue.destinationViewControllerは確か ContactCardTVC

であること

関連する問題