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