将按钮数组保存到 NSUserDefaults swift
Saving an Array of Buttons to NSUserDefaults swift
正如标题所说。这可能吗?这是我的代码:
离开视图时...
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
defaults.setObject(buttonArray, forKey: "buttonArray")
defaults.synchronize()
}
进入时...
override func viewDidLoad() {
super.viewDidLoad()
if let isAppAlreadyLaunchedOnce = defaults.stringForKey("isAppAlreadyLaunchedOnce") {
print("View already launched")
let savedArray = defaults.arrayForKey("buttonArray")
buttonArray = savedArray as! [UIButton]
} else {
print("View launched first time")
buttonArray = (button1, button2, button3, button4)
}
//rest of code where button array gets changed
}
调用 prepareForSegue 时出现错误 SIGNAL SIGABRT
你不能那样做。用户默认值是一个 属性 列表,您只能在其中存储以下类型(数组和字典也只能包含这些类型):
– NSArray
– NSData
– NSDictionary
– NSNumber
– NSString`
您可以考虑将按钮编码到 NSData 中,但我认为这是糟糕的设计。用户默认值应该用于在应用程序重新启动后应该保留的用户首选项。您究竟需要什么信息来重新创建这些按钮?它需要在应用程序被杀死后工作还是只有当你重新进入这个屏幕时才工作?
正如标题所说。这可能吗?这是我的代码:
离开视图时...
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
defaults.setObject(buttonArray, forKey: "buttonArray")
defaults.synchronize()
}
进入时...
override func viewDidLoad() {
super.viewDidLoad()
if let isAppAlreadyLaunchedOnce = defaults.stringForKey("isAppAlreadyLaunchedOnce") {
print("View already launched")
let savedArray = defaults.arrayForKey("buttonArray")
buttonArray = savedArray as! [UIButton]
} else {
print("View launched first time")
buttonArray = (button1, button2, button3, button4)
}
//rest of code where button array gets changed
}
调用 prepareForSegue 时出现错误 SIGNAL SIGABRT
你不能那样做。用户默认值是一个 属性 列表,您只能在其中存储以下类型(数组和字典也只能包含这些类型):
– NSArray
– NSData
– NSDictionary
– NSNumber
– NSString`
您可以考虑将按钮编码到 NSData 中,但我认为这是糟糕的设计。用户默认值应该用于在应用程序重新启动后应该保留的用户首选项。您究竟需要什么信息来重新创建这些按钮?它需要在应用程序被杀死后工作还是只有当你重新进入这个屏幕时才工作?