我想将数据保存到Swift3中的NSUSerDefaults中:
func a() {
let userDefaults = UserDefaults.standard
let sessionData = NSKeyedArchiver.archivedData(withRootObject: session)
userDefaults.set(session, forKey: "SpotifySession")
userDefaults.synchronize()
}
但它崩溃了
NSKeyedArchiver.archivedData(withRootObject: session)
我该如何解决?
答案 0 :(得分:1)
我认为您的会话类中没有编码和解码方法。 如果您的会话是自定义类,那么您应该编写以下两种方法,而不会使该存档无效。
代码:
Objective C Version:
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:self.session_property1 forKey:@"session_property1"];
[encoder encodeObject:self.session_property2 forKey:@"session_property2"];
}
- (id)initWithCoder:(NSCoder *)decoder {
if((self = [super init])) {
//decode properties, other class vars
self.ession_property1 = [decoder decodeObjectForKey:@"ession_property1"];
self.ession_property2 = [decoder decodeObjectForKey:@"ession_property2"];
}
return self;
}
这里session_property1和session_property2被认为是字符串,如果你的变量不是字符串,你需要相应地格式化它。
在您上课后,如果您将使用archiveData
方法,那么它将归档数据,然后您可以将这些数据设置为NSUserDefault
Swift版本:
required init(coder decoder: NSCoder) {
self.state = decoder.decodeObject(forKey: "state") as? String
self.country = decoder.decodeObject(forKey: "country") as? String
self.zip = decoder.decodeObject(forKey: "zip") as? String
self.locality = decoder.decodeObject(forKey: "locality") as? String
self.city = decoder.decodeObject(forKey: "city") as? String
self.latitude = decoder.decodeObject(forKey: "latitude") as? Double
self.longitude = decoder.decodeObject(forKey: "longitude") as? Double
}
func encode(with coder: NSCoder) {
coder.encode(state, forKey: "state")
coder.encode(country, forKey: "country")
coder.encode(zip, forKey: "zip")
coder.encode(locality, forKey: "locality")
coder.encode(city, forKey: "city")
coder.encode(latitude, forKey: "latitude")
coder.encode(longitude, forKey: "longitude")
}
我希望它会对你有所帮助。 快乐的编码...
答案 1 :(得分:-1)
我认为,这是在NSUserDefaults中保存数据的正确方法:
$('.dropdown').hover(function(e){$(this).addClass('open')})