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. 然后这个代码也可以简化: username!.text = dusername password!.text = dpassword notifications.setOn(dnotifications,animated: true) 写入用户默认值时,使用setBool:forKey作为Bool值,但是没有等效的String,setObject:forKey是正确的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |