加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 应用程序崩溃与EXC_BREAKPOINT错误

发布时间:2020-12-14 17:47:16 所属栏目:百科 来源:网络整理
导读:我有一个我在 Xcode 7.2中制作的应用程序.我有一个主菜单,其中一个按钮有一个设置视图控制器的segue.设置视图控制器具有以下代码,每次到达该视图控制器时,它都会因EXC_BREAKPOINT错误而崩溃.有趣的是,这只发生在运行iOS 7的iPhone 4上.它不会在运行iOS 9的iO
我有一个我在 Xcode 7.2中制作的应用程序.我有一个主菜单,其中一个按钮有一个设置视图控制器的segue.设置视图控制器具有以下代码,每次到达该视图控制器时,它都会因EXC_BREAKPOINT错误而崩溃.有趣的是,这只发生在运行iOS 7的iPhone 4上.它不会在运行iOS 9的iOS模拟器iPhone 6中崩溃.

无论如何,这是代码.

//
//  SettingsController.swift
//  Arbor Hills iOS
//
//  Created by Andrew on 11/22/15.
//  Copyright ? 2015 Arbor Hills Vet. All rights reserved.
//

import UIKit

class SettingsController: UITableViewController {

    @IBOutlet weak var username: UITextField!
    @IBOutlet weak var password: UITextField!
    @IBOutlet weak var notifications: UISwitch!
    override func viewDidLoad(){
        super.viewDidLoad()

        let defaults = NSUserDefaults.standardUserDefaults()
        let dusername = defaults.valueForKey("username")!

        let dpassword = defaults.valueForKey("password")!
        let dnotifications = defaults.valueForKey("notifications")!

        username!.text = String(dusername)
        password!.text = String(dpassword)
        if(dnotifications as! Bool == true){
            notifications.setOn(true,animated: true)
        }else{
            notifications.setOn(false,animated:true)
        }
    }

    @IBAction func saveUsername(sender: AnyObject) {
       let defaults = NSUserDefaults.standardUserDefaults()
        defaults.setObject(username.text!,forKey: "username")
    }

    @IBAction func savePassword(sender: AnyObject) {
        let defaults = NSUserDefaults.standardUserDefaults()
        defaults.setObject(password.text!,forKey: "password")
    }

    @IBAction func notificationsModified(sender: AnyObject) {
        let defaults = NSUserDefaults.standardUserDefaults()
        defaults.setObject(notifications.on,forKey: "notifications")
    }

    }

解决方法

如果没有注册默认值,则NSUserDefaults为对象返回nil.当您打开nil值时,您将收到运行时错误(崩溃).

Apple建议将任何键的默认值注册为占位符,直到第一次保存自定义值.

在AppDelegate中添加applicationDidFinshLaunching

let defaults = NSUserDefaults.standardUserDefaults()
let defaultValues = ["username" : "","password" : "","notifications" : false]
defaults.registerDefaults(defaultValues)

斯威夫特3

let defaults = UserDefaults.standard
let defaultValues : [String : Any] = ["username" : "","notifications" : false]
userDefaults.register(defaults: defaultValues)

这会记录空字符串和布尔值false.
然后,您可以安全地检索值

let defaults = NSUserDefaults.standardUserDefaults()
let dusername = defaults.stringForKey("username")!
let dpassword = defaults.stringForKey("password")!
let dnotifications = defaults.boolForKey("notifications")

斯威夫特3

let defaults = UserDefaults.standard
let dusername = defaults.string(forKey:"username")!
let dpassword = defaults.string(forKey:"password")!
let dnotifications = defaults.bool(forKey:"notifications")

对于String值始终使用stringForKey,对Bool值使用boolForKey.
永远不要将valueForKey与NSUserDefaults一起使用,NSUserDefaults是一种特殊的KVC方法.

然后这个代码也可以简化:

username!.text = dusername
password!.text = dpassword
notifications.setOn(dnotifications,animated: true)

写入用户默认值时,使用setBool:forKey作为Bool值,但是没有等效的String,setObject:forKey是正确的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读