0

I'm making a multi conversion tool in iOS to build up my portfolio. However, the distance tab will not load the view. It instantly crashes and gives me two errors.

The second one appears when I try to continue. Below are the errors and my Swift class tied to the controller as well as what the app looks like.

errors

import UIKit

class DistanceViewController: UIViewController, UITextFieldDelegate{
    @IBOutlet var userDistance: UITextField!
    @IBOutlet var resultLabel: UILabel!

    var fromKilometerValue: Measurement<UnitLength>?{
        didSet{
            milesConversion()
        }
    }

    var fromMileValue: Measurement<UnitLength>?{
        didSet{
            kilometerConversion()
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        milesConversion()
        kilometerConversion()
    }

    //Dont forget to drag a gesture recognizer
    @IBAction func dismissKeyboard(_sender: UITapGestureRecognizer){
        userDistance.resignFirstResponder()
    }

    let numberFormatter: NumberFormatter = {
        let nf = NumberFormatter()
        nf.numberStyle = .decimal
        nf.minimumFractionDigits = 1
        nf.maximumFractionDigits = 1
        return nf
    }()

    func textField(_ userDistance: UITextField,
                   shouldChangeCharactersIn range: NSRange,
                   replacementString string: String) -> Bool {
        let existingTextHasDecimalSeparator = userDistance.text?.range(of: ".")
        let replacementTextHasDecimalSeparator = string.range(of: ".")

        if existingTextHasDecimalSeparator != nil,
            replacementTextHasDecimalSeparator != nil {
            return false
        } else {
            return true
        }
    }

    var toMileValue: Measurement<UnitLength>?{
        if let fromKilometerValue = fromKilometerValue{
            return fromKilometerValue.converted(to: .miles)
        }
        else{
            return nil
        }
    }

    var toKilometerValue: Measurement<UnitLength>?{
        if let fromMileValue = fromMileValue{
            return fromMileValue.converted(to: .kilometers)
        }
        else{
            return nil
        }
    }

    func milesConversion(){
        if let toMileValue = toMileValue {
            resultLabel.text = numberFormatter.string(from: NSNumber(value: Double(userDistance.text!)!))! + " km" + " is " + numberFormatter.string(from: NSNumber(value: toMileValue.value))! + " miles"
        }
    }

    func kilometerConversion(){
        if let toKilometerValue = toKilometerValue{
            resultLabel.text = numberFormatter.string(from: NSNumber(value: Double(userDistance.text!)!))! + " miles" + " is " + numberFormatter.string(from: NSNumber(value: toKilometerValue.value))! + " km"
        }
    }

    @IBAction func convertKilometers(_ sender: Any) {
        if let input = userDistance.text, let value = Double(input) {
            fromKilometerValue = Measurement(value: value, unit: .kilometers)
        } else {
            fromKilometerValue = nil
        }

        if(toMileValue == nil){
            resultLabel.text = "Unable to Convert " + userDistance.text!
        }
    }

    @IBAction func convertMiles(_ sender: Any) {
        if let input = userDistance.text, let value = Double(input) {
            fromMileValue = Measurement(value: value, unit: .miles)
        } else {
            fromMileValue = nil
        }

        if(toKilometerValue == nil){
            resultLabel.text = "Unable to Convert " + userDistance.text!
        }
    }
}

The class and view are mapped properly from what I see. Anybody have any idea?

EDIT: i had old connections that didnt exist in Main.storyboard, i removed them and the view loads just fine!

1 Answers1

0

Check all of your outlet connections. And read stackoverflow.com/questions/32170456/… – rmaddy