在解开可选值(lldb)错误时意外地发现了nil

时间:2015-09-01 05:28:58

标签: ios swift

@IBAction func savePlayerDetail(segue:UIStoryboardSegue) {
    if let playerDetailsViewController = segue.sourceViewController as? PlayerDetailsViewController {

        //add the new player to the players array
        players.append(playerDetailsViewController.player)

        //update the tableView
        let indexPath = NSIndexPath(forRow: players.count-1, inSection: 0)
        tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)

    }
}

// PlayerDetailsViewController我已将prepareForSegue放在播放器对象的底部。

class PlayerDetailsViewController: UITableViewController {

    var player:Player!

    @IBOutlet weak var detailLabel: UITableViewCell!
    @IBOutlet weak var nameTextField: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()

        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Table view data source

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        if indexPath.section == 0 {
            nameTextField.becomeFirstResponder()
        }
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "SavePlayerDetail" {
            player = Player(name: self.nameTextField.text, game: "Chess", rating: 1)
        }
    }
}

我想在列表中添加一个新玩家。但是player.append线致命错误。我不知道它的内容,请描述一下。

2 个答案:

答案 0 :(得分:0)

请检查player实例的playerDetailsViewController属性。这是可选的,似乎是nil

IBAction func savePlayerDetail(segue:UIStoryboardSegue) {
    if let playerDetailsViewController = segue.sourceViewController as? PlayerDetailsViewController {

         if let player = playerDetailsViewController.player{

              //add the new player to the players array
               players.append(player)

              //update the tableView
              let indexPath = NSIndexPath(forRow: players.count-1, inSection: 0)
              tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
         }
         else{

             println("player is empty")
         }
    }
}

答案 1 :(得分:0)

好像,您尚未在identifier中为unwind segue设置Storyboard

在故事板中将方法identifier绑定到SavePlayerDetail时,将savePlayerDetail设置为Exit

enter image description here 仔细检查一下。这可能会有所帮助!