2014-11-24 3 views
8

Как и в заголовке, я пытаюсь изменить текст ярлыка нажатием кнопки. появляется ошибка в строке self.playerChoice.text = "You: Rock"Swift: текст ярлыка -> «фатальная ошибка: неожиданно найден nil во время разворачивания необязательного значения»

import UIKit 

class ViewController: UIViewController { 

var player : Int = Int() 

@IBOutlet weak var readyLabel: UILabel! 

@IBAction func noButton(sender: AnyObject) { 
    exit(0) 
} 

// --------------------------------------------------------- 

@IBOutlet var computerChoice: UILabel! 

@IBOutlet var playerChoice: UILabel! 

@IBOutlet var score: UILabel! 


// Variables ------------------------------------------------- 

let Rock : String = "Rock" 
let Paper : String = "Paper" 
let Scissors : String = "Scissors" 

//------------------------------------------------------------ 



override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    } 


// ---------------------------------------------------------------- 

@IBAction func rockButton(rockbut: UIButton) { 

    player = 0 
    var ai = arc4random_uniform(3) 
    self.playerChoice.text = "You: Rock" 

    } 

@IBAction func paperButton(paperbut: UIButton) { 

    player = 1 
    var ai = arc4random_uniform(3) 
    self.playerChoice.text = "You: Paper" 

    } 

@IBAction func scissorsButton(scissorsbut: UIButton) { 

    player = 2 
    var ai = arc4random_uniform(3) 
    self.playerChoice.text = "You: Scissors" 

     } 
    } 
+0

Инициализирован ли «игрок»? Вы подключили розетку в IB. – gagarwal

+0

Должно быть, я сделал необходимые шаги при добавлении метки – artie711

ответ

0

Я попробовал этот код и он работает нормально для меня:

class ViewController: UIViewController { 

var player : Int = Int()  //Declare this globally 

@IBOutlet weak var readyLabel: UILabel! 

@IBAction func noButton(sender: AnyObject) { 
    exit(0) 
} 

// --------------------------------------------------------- 

@IBOutlet var computerChoice: UILabel! 

@IBOutlet var playerChoice: UILabel! 

@IBOutlet var score: UILabel! 


// Variables ------------------------------------------------- 

let Rock : String = "Rock" 
let Paper : String = "Paper" 
let Scissors : String = "Scissors" 

//------------------------------------------------------------ 

@IBAction func rockButton(rockbut: UIButton) { 
    player = 0 
    var ai = arc4random_uniform(3) 
    self.playerChoice.text = "You: Rock" 
} 



@IBAction func paperButton(sender: UIButton) { 
    player = 1 
    var ai = arc4random_uniform(3) 
    self.playerChoice.text = "You: Paper" 
} 

@IBAction func scissorsButton(sender: UIButton) { 
    player = 2 
    var ai = arc4random_uniform(3) 
    self.playerChoice.text = "You: Scissors" 
} 



override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    var p : String = "Undecided" 

    if (player == 0) { 
     var p: String = "Rock" 
    } else if (player == 1) { 
     var p: String = "Paper" 
    } else if (player == 2) { 
     var p: String = "Scissors" 
    } 


    } 

} 
+0

Обновлен мой код, все еще не работает – artie711

+0

Такая же ошибка, как раньше – artie711

+0

Да, я даже удалил ее и воссоздал ссылку. Под инспектором соединений для ярлыка «you», выбор игрока подключен к контроллеру просмотра при ссылках на выходы – artie711

3

Похоже, выбор игрока не инициализирован.

@IBOutlet var playerChoice: UILabel! 

Возможно, соединение между розеткой и интерфейсной панелью/раскадровкой потеряно. Попробуйте подключить его снова.

Я создал небольшую демонстрацию, и все работает отлично:

enter image description here

Проверьте круги на левой стороне IBOutlet заполнены. В противном случае соединение будет потеряно.

+0

Единственное, что я сделал, это контроль, щелчок правой кнопкой мыши и перетаскивание в viewController. В инспекторе соединений у меня есть: Player Choice подключен к контроллеру просмотра при ссылках на выходы. – artie711

+0

Я обновил свой ответ. – Stefan

+0

Да, все круги заполнены, я также обновил код, все еще не работает – artie711

18

Я столкнулся с этой проблемой, и оказалось, что ярлыки, которые я пытался редактировать не существовало в то время, кода побежал.

Оказывается, я ссылался на один и тот же контроллер представлений из родительского вида и Вид детского контейнера. Ярлыки, которые я пытался изменить, были только в представлении контейнера, но, поскольку оба представления загрузились, он управлял контроллером представления для обоих, поэтому он попытался найти метки, которых не было в родительском представлении, и выбросил вышеуказанную ошибку.

Так урок, который я узнал ... Если ссылка на объект представления бросает NIL ..

  • The View не правильно отображается в View Controller.
  • Объект в представлении не отображается на ссылку IBOutlet.
  • Или, как и в моем случае, к одному и тому же контроллеру просмотра подключены несколько видов, а ссылки для просмотра объектов в одном представлении не найдены в другом.
2

Я столкнулся с той же проблемой в Xcode 6.2. Я использую отдельные XIB вместо раскадровки. Проблема для меня заключалась в том, что с помощью Swift Xcode не связывает XIB с контроллером вида, если имена совпадают. Следовательно, IBOutlets для ярлыков указывают на нуль, дающий фатальный.

Вы можете изменить viewcontroller.xib, который будет называться modulename.viewcontroller.xib, чтобы xcode мог связать его с контроллером представления, и проблема исчезла.

Другие варианты указаны на этой теме:

Can't Load UIViewController XIB file in Storyboard in Swift

2

Что это исправил для меня (и это заставляет меня каждый раз, особенно если вы не знакомы с использованием раскадровки), чтобы убедиться, что вы инициализации ваш контроллер представления так:

slideShowVC = (UIStoryboard(name: "Main",bundle: nil).instantiateViewControllerWithIdentifier("WWPhotoSlideShowVC") as! WWPhotoSlideShowVC) 

вместо стенда только XIb образом:

slideShowVC = WWSlideShowVC() 

Или все ваши розетки будут нулевыми, и вскоре начнутся многие головные боли.

Смежные вопросы

 Смежные вопросы