我创建了一个名为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开发人员,谢谢你的帮助。
答案 0 :(得分:2)
您无法将对象存储在NSUserDefaults
中的原因是因为它不是属性列表类型(NSNumber,NSData,NSArray,NSDictionary,NSDate,String,Bool)。要将其存储在NSUserDefaults
中,它必须是这些类型中的一种,因此您可以将其序列化为NSData
,但为了做到这一点,它需要符合NSCoding
。
更好的解决方案是在prepareForSegue
答案 1 :(得分:1)
NSUserDefaults
不支持保存自定义类。
您应该将UserDetailsClass
转换为Dictonary
并将字典保存到NSUserDefaults
。