在 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
中传递对象
我创建了一个名为 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