2015-05-20 2 views
0

Я начинаю быстро, и я пишу приложение, которое покажет список вещей. Когда вы нажмете на один из них, вы получите подробную информацию об этом и фотографию. Однако у меня есть одна проблема - у меня есть код для показа изображения, но когда я нажимаю на симулятор, он падает.Сбой при добавлении UIImage из кода

Текст, который находится в нижней части Xcode, когда приложение падениям:

fatal error: unexpectedly found nil while unwrapping an Optional value

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    var detail = segue.destinationViewController as! detailSkinsViewController 
    detail.skinNameLabel = self.skin 
    if (self.skin == "AK47 | Wasteland Rebel") { 
     detail.skinImg.image = UIImage(named: "s495fn") 
    } 
} 

Спасибо!

+0

Ошибка означает, что значения не установлены. На какой строке указывается ошибка? – da1lbi3

+0

дубликат http://stackoverflow.com/questions/30342213/moving-the-uiimageview-from-the-main-view-to-another/30343041#30343041 –

ответ

3

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

var detail = segue.destinationViewController as! detailSkinsViewController 

Это требует аварии, если destinationViewController не из класса detailSkinsViewController. (Классы Swift всегда должны начинаться с заглавной буквы. Это также должно быть let, а не var. Вы никогда не изменяете его.) Использование if-let здесь было бы намного безопаснее.

detail.skinImg.image = UIImage(named: "s495fn") 

Это очень неясно, что это, но если skinImg является UIImageView!, то можно было бы ожидать, чтобы это врезаться если это назначение СИБ не загружены (что вероятно). Вы, как правило, никогда не должны обращаться к другим объектам IBOutlets именно по этой причине. (Это также хороший повод, чтобы использовать ?, а не ! для IBOutlets. Это привело бы к просто «ничего не происходит», а не грохотом.)

Вместо того, чтобы возиться с другой точкой зрения контролеров точек, вы должны создать UIImage? недвижимость на самом контроллере представления. В своем didSet обновите UIImageView, если вид загружен (isViewLoaded). В течение viewDidLoad инициализируйте UIImageView, используя свойство. Таким образом, у вас есть ясный API для других, чтобы установить образ, не отображающий ваши внутренние подсмотры (которые являются деталями реализации).

В качестве примера:

class ViewController: UIViewController { 
    @IBOutlet private var imageView: UIImageView? 
    var image: UIImage? { 
     didSet(newImage) { 
      self.imageView?.image = newImage 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.imageView?.image = self.image 
    } 
} 
0

Эта ошибка приходит обычно при попытке разворачивать значение необязательного переменной, которая не имеет никакого значения. Сначала проверьте свой дополнительные переменные и отладку построчно, чтобы увидеть, если какие-либо из факультативных переменных не имеет значения, на все, что вы пытались разворачивать

0

Вы должны проверить свои дополнительные значения, я не видел переменную кожи но я думаю, что код ниже решит вашу проблему.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let detail = segue.destinationViewController as! detailSkinsViewController { 
      detail.skinNameLabel = self.skin 
      if (self.skin == "AK47 | Wasteland Rebel") { 
       detail.skinImg.image = UIImage(named: "s495fn") 
      } 
     } 
} 
+0

Мое определение var var - это просто var skin = "" cause i задайте его значение для текста текущего элемента представления таблицы. Но когда я использую ваш код: сначала - я должен изменить «как!» как?". Когда я делаю это и запускаю симулятор и нажимаю на элемент представления таблицы, симулятор сбой и появляется сообщение: «Неустранимая ошибка: неожиданно найдено нуль при разворачивании необязательного значения» Ошибка находится на линии с помощью: detail.skinImg.image = UIImage (названный: «s495fn») – krystiangonczi

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