在Swift 3.0 iOS 10中保存和加载时遇到问题

时间:2016-09-22 16:10:46

标签: ios swift crash save load

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

@IBOutlet weak var StaticLabel: UILabel!

它表示“线程1:断点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")
    }
}

2 个答案:

答案 0 :(得分:0)

  

首次需要在加载函数中添加空值处理   对于UserDefaults中的密钥"save"没有任何价值。

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

答案 1 :(得分:0)

您的代码行

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

用户默认值为键的整数Save为nil,实际上该键在用户默认值中根本不存在

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

 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)
    }        
}