在 Swift 3.0 iOS 10 中保存和加载时出现问题

Having problems with saving and loading in Swift 3.0 iOS 10

我真的是 Swift 和 iOS 编程领域的新手,我正在尝试学习很多东西。对于这个应用程序,我只想保存和加载一个整数,但我遇到了问题,因为我在堆栈溢出和互联网上找到的所有内容似乎都无法在 Swift 上运行 3. 应用程序立即崩溃,它中断于:

@IBOutlet weak var StaticLabel: UILabel!

它说 "Thread 1: breakpoint 3.5" 。非常感谢任何帮助和提示:)

import UIKit
import AVFoundation

var player: AVAudioPlayer?
var number = 0

class ViewController: UIViewController {
    @IBOutlet weak var StaticLabel: UILabel!
    @IBOutlet weak var NumberLabel: UILabel!
    let defaults = UserDefaults.standard

    override func viewDidLoad() {
        super.viewDidLoad()
        Load()
    }

    func Load()
    {
        number = defaults.integer(forKey: "Save")
        NumberLabel.text = String(number)
    }

    func playSound()
    {
        let path = Bundle.main.path(forResource: "RightYouAre.mp3", ofType: nil)
        let url = URL(fileURLWithPath: path!)

        do {
            let sound = try AVAudioPlayer(contentsOf: url)
            player = sound
            sound.play()
        }
        catch {
            // couldn't load file :(
        }

    }


    @IBAction func Minus(_ sender: AnyObject) {
        number = number - 1
        NumberLabel.text = String(number)
        defaults.set(number, forKey: "Save")
    }

    @IBAction func Plus(_ sender: UIButton) {
        playSound()
        number = number + 1
        NumberLabel.text = String(number)
        defaults.set(number, forKey: "Save")
    }
}

You need to add null handling to the load function as first time there will be no value for the key "save" in your UserDefaults.

func Load()
{
    if let number = defaults.integer(forKey: "Save")
    {
        self.number = number
        NumberLabel.text = String(number)
    }
}

你的代码行

number = defaults.integer(forKey: "Save")

user defaults integer for key Save is nil, 实际上这个key在user defaults中根本不存在

在从用户默认值加载此整数之前,必须先设置它

 if defaults.object(forKey: "Save") !=    nil { number =    defaults.integer(forKey: "Save") }

这将确保对象在获取它的值之前存在于用户默认值中

最后你的加载函数应该是

func Load() 
{
    if defaults.object(forKey: "Save") != nil 
    { 
        number = defaults.integer(forKey: "Save") 
        NumberLabel.text = String(number)
    }        
}