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

时间:2015-05-15 13:49:21

标签: ios swift nsuserdefaults

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

import Foundation


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

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

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")

    }

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

错误控制台显示:

  

尝试插入非属性列表对象appName.UserDetailsClass   关键的currentGuest'

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

我是初学iOS开发人员,谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

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

更好的解决方案是在prepareForSegue

中传递对象

答案 1 :(得分:1)

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

相关问题