如标题所示。这可能吗?这是我的代码:

当离开视图时...

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,但这在我看来是不好的设计。应将用户默认值用于用户首选项,该首选项应在重新启动应用程序后保留。重新创建这些按钮到底需要什么信息?在应用终止后还是仅在您重新进入此屏幕后才需要工作?

10-07 20:46