我需要使用 NSUserDefaults 存储一个自定义类来保持用户的登录状态,
这个类包含一个自定义结构体与一些其他参数
结构体用来存储用户的昵称,主页 url,头像,auth 等
在 StackOverflow 找到了使用 NSCoding 打包存储自定义对象的方法:
http://stackoverflow.com/questions/26469457/saving-custom-swift-class-with-nscoding-to-userdefaults
可是照着写出来之后在这里出现编译错误:
func encodeWithCoder(aCoder: NSCoder) {
if let userData = self.userData {
aCoder.encodeObject(userData, forKey: "userData")
}
}
Cannot invoke 'encodeObject' with an argument list of type '(User, forKey: String)'
原因是这条声明
public var userData = User?()
其中 User 的定义如下:
public struct User {
public var id = 0
public var url = ""
public var userName = ""
public var nickName = ""
……
}
encodeWithCoder 函数应该怎么写才可以除掉编译错误呢?谢谢~
P.S.
现在使用 keyChain 保存了用户的密码,但是必须发起认证才能得到用户数据,头一次写程序,没什么经验,想知道大家都用哪些保持登录状态的方法呢?
1
Sunnyyoung 2015-05-18 23:57:28 +08:00
用SQLite ORM写入不好么?现在还用plist来存登录状态??
保持登录状态的话可以Cookie+SQLite 另外写到NSUserDefault的话,必须是NSDictionary的吧?先把一个对象的所有property&value转成Dictionary再存NSUserDefault好咯~ |
2
hdbean 2015-05-19 00:45:23 +08:00
归解档储存方便一些
|
3
mudkip 2015-05-19 00:55:42 +08:00
大概因为 User 是一个 struct,不是 AnyObject,所以不能使用 encodeObject
|
4
LINAICAI 2015-05-19 01:27:23 +08:00
。。。
如果不太讲究的话,就写一个customClass,继承于NSObject,再写一个Load和一个Save方法,分别从NSUserDefaults读写数据。 |
5
canautumn 2015-05-19 01:38:18 +08:00
3楼正解。应该用NSValue把struct包装一下,再用encodeObject。
|
6
xuan_lengyue 2015-05-19 08:26:40 +08:00
实现 NSCoding 协议即可
|
7
nellace 2015-05-19 08:52:33 +08:00
现在swift开发方便快捷吗?
|
8
wayne1043 2015-05-19 09:11:39 +08:00
为什么不用对象,要用结构体,这样更麻烦了。你要先包装成对象,在进行归档。
|