【问题标题】:Having problems with saving and loading in Swift 3.0 iOS 10在 Swift 3.0 iOS 10 中保存和加载时出现问题
【发布时间】:2026-02-14 05:40:01
【问题描述】:

我真的是 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")
    }
}

【问题讨论】:

  • 您需要使用有关崩溃的详细信息更新您的问题(不要发表评论)。完整的错误信息是什么?究竟是哪一行导致了崩溃?
  • 另请参阅raywenderlich.com/10209/my-app-crashed-now-what-part-1 了解如何调试崩溃。
  • 您的代码根本没有显示任何使用 StaticLabel 的情况。

标签: ios swift crash save load


【解决方案1】:

你的代码行

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

user defaults integer for key Save为nil,实际上这个key在用户默认值中根本不存在

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

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

【讨论】:

    【解决方案2】:

    您需要在第一次加载函数时添加空处理 您的 UserDefaults 中的键 "save" 将没有值。

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

    【讨论】:

    • 设法修复它!谢谢:)
    • 是不是同样的问题
    • 我认为是同一个
    • 几乎相同,但它不是在 swift 中添加 null 处理的正确方法