我是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")
}
}
答案 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)
}
}