Фатальная ошибка: неожиданно обнаружен ноль при развертывании необязательного значения при попытке изменить текст UILabel

Я делаю простой преобразователь температуры для класса мобильных приложений, используя Swift. Мы как бы задираемся по-быстрому, поэтому у меня нет большого опыта с этим. У меня было много проблем с его компиляцией, но в итоге я получил все красиво и аккуратно, без всяких предупреждений и ошибок, и я доволен своим кодом в стиле MVC. Единственная проблема заключается в том, что когда я ввожу temp и нажимаю кнопку Convert, мои контрольные точки в журнале подтверждают, что я получаю правильное двойное значение для преобразования, и я кастую его как String, но когда я пытаюсь изменить метку outputText, я получить фатальную ошибку: неожиданно обнаружил ноль при развертывании необязательного значения. Я надеялся, что это что-то очень простое, что сможет поймать вторая пара глаз. Мое приложение выглядит так...

Вид приложения

Мой ViewController это...

import UIKit

class ViewController: UIViewController
{

    @IBOutlet weak var tempInput: UITextField!
    @IBOutlet weak var tempOutput: UILabel!
    @IBOutlet weak var convertMethod: UISwitch!

    override func viewDidLoad()
    {
        print("view load confirmed");
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

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

    @IBAction func convert(sender: AnyObject!)
    {
        print ("button press confirmed");

        let t = Double(tempInput.text!)
        let m = convertMethod.on
        let result = convertModel(temp:t!,method:m)
        print("result has been set to object variable created as stated above");

        let afterConvert = result.convertTemp()
        print("the convertTemp method was called and the result was stored as the double: \(afterConvert)");

        let finalForm = String(afterConvert)
        print("converted the double into the string: \(finalForm)");

        tempOutput.text = finalForm
        //^^^^^^^ this is the line that fails
    }
}

и мой класс convertModel (я знаю, класс должен быть написан заглавными буквами, к тому времени, когда я заметил и попытался изменить его, он сломал все)...

import Foundation
class convertModel
{
    var temp:Double?
    var method:Bool?

    init(temp:Double,method:Bool)
    {
        self.temp = temp
        self.method = method
        print("object of type convertModel created with \(temp) as temp and \(method) as method");
    }

    func convertTemp()->Double
    {
        print("convertTemp method entered");

        if method == true
        {
            print("if conditional entered");
            print("conversion completed, exiting convertTemp method");

            return (temp! * (9/5) + 32)
        }
        else
        {
            print("else conditional entered");
            print("conversion completed, exiting convertTemp method");
            return (temp! - 32) * (5/9)
        }
    }
}

Любая помощь с благодарностью. Но имейте в виду, что это очень Swift 101, поэтому любые слишком сложные решения не сильно помогут. Благодарю.

1 ответ

Так что я не знаю, почему или как UILabel потеряла свою первоначальную связь с ViewController, но в отчаянии я перетащил старый Ctrl + Click на ViewController и просто назвал получившийся Outlet как-то еще (tempOutputs), переименовал текст назначение и теперь это работает. Так что это не столько ответ, сколько обходной путь для любого, кто здесь тоже окажется.

Другие вопросы по тегам