在 NSUserDefaults 中存储 class 并在下一个视图中访问

Storing class in NSUserDefaults and accessing in next view

我创建了一个名为 UserDetails 的 swift class,下面是结构:

import Foundation


class UserDetailsClass {
    var fullname: String!
    var mobile: String!
    var email: String!
    var password: String!
}

在我当前的视图控制器中,我创建了一个实例并将我想要移动到下一个视图的值存储在实例变量中,如下所示:

var userDetailsInstance = UserDetailsClass()
            userDetailsInstance.fullname = fullNameTextField.text
            userDetailsInstance.mobile = mobileTextField.text
            userDetailsInstance.email = emailTextField.text
            userDetailsInstance.password = passwordTextField.text

            var prefs = NSUserDefaults.standardUserDefaults()
            prefs.setObject(userDetailsInstance, forKey: "currentGuest")
            prefs.synchronize()

在下一个视图中(连接segue的地方,我尝试这样做:

override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        var prefs = NSUserDefaults.standardUserDefaults()
        var userDetailsClass: AnyObject? = prefs.valueForKey("currentGuest")

    }

但应用程序立即崩溃。这里的 objective 是在用户输入 his/her 详细信息后,我不会将它们存储在服务器中,而是存储在 NSUserDefault 中,然后将它们带到下一个将进行 SMS 验证的视图。验证完成后,我会将信息存储在服务器上。

错误控制台显示:

Attempt to insert non-property list object appName.UserDetailsClass for key currentGuest'

有没有比在 NSUserDefault 中存储对象更好的移动数据的方法?

我是初学者 iOS 开发人员,非常感谢您的帮助。

NSUserDefaults 不支持保存自定义 类。 您应该将 UserDetailsClass 转换为 Dictonary 并将字典保存为 NSUserDefaults.

您无法将对象存储在 NSUserDefaults 中的原因是它不是 属性 列表类型(NSNumber、NSData、NSArray、NSDictionary、NSDate、String、Bool)。要将它存储在 NSUserDefaults 中,它必须是这些类型之一,以便您可以将它序列化为 NSData,但为了做到这一点,它需要符合 NSCoding

更好的解决方案是在prepareForSegue

中传递对象