2017-02-02 2 views
0

私は以下のクラスを持っています。それは私が私のfriend?[indexPath.row]をすることが確認されていてもエラーに
セグメンテーションされたコントローラにデータを渡す準備ができていません

fatal error: unexpectedly found nil while unwrapping an Optional value

を取得していますということですなぜ私は

var friends: [User]? 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    performSegueWithIdentifier("viewFriend", sender: indexPath) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let destinationVC = segue.destinationViewController 
    if let friendsProfileVC = destinationVC as? FriendsProfileViewController{ 
     if let indexPath = sender as? NSIndexPath{ 
      print(indexPath.row) 
      friendsProfileVC.user = friends?[indexPath.row] 
     } 
    } 
} 

データを渡すために、次のでしたsegueingクラスで

class FriendsProfileViewController: UIViewController { 
    var user : User! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     print(user.firstName) 
    } 
} 

私がセグをするときに値を含んでいますか?

+0

デバッグしましたか?はいの場合、何が起こっていますか? –

+0

あなたは与えられたコードからのクラッシュに直面していますか?あなたは初期化されているか、それとも空ですか? –

+0

'print(indexPath.row)'行のコンソール出力を取得していますか? –

答えて

0

segueを実行する前にユーザーを取得して、segue送信者として渡してください。

var friends: [User]? 

private func friend(at index: Int) -> User? { 

    return friends.flatMap { $0.indicies.contains(index) ? $0[index] : nil } 
} 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    if let friend = friend(at: indexPath.row) { 
     performSegueWithIdentifier("viewFriend", sender: friend) 
    } else { 
     print("Invalid index: \(indexPath.row)") 
    } 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    switch (segue.destinationViewController, sender) { 
    case (let controller as FriendsProfileViewController, let user as User): 
     controller.user = user 
    default: 
     break 
    } 
} 
0

私は信じている問題は、このようなfriends![indexPath.row]Optional(User)を返したとして、我々は常に配列からオプションを取り戻すことです。

私はオプションユーザーを送信者として渡しました。それを解いて、他のVCに設定してください。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    performSegueWithIdentifier("viewFriend", sender: friends![indexPath.row]) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    print(sender) 
    let destinationVC = segue.destinationViewController 
    if let friendsProfileVC = destinationVC as? FriendsProfileViewController{ 
     if let friend = sender as? User{ 
      print(friend) 
      print(friend.firstName) 
      friendsProfileVC.user = friend 
     } 
    } 
} 

アップデートは、私はfriendsProfileVC.user = friends![indexPath.row]からfriendsProfileVC.user = friends?[indexPath.row]を変更しようとした、それが働きました。なぜそれが早く動かなかったのか分かりません。

関連する問題