セッションクラスでメソッドをエンコードしてデコードしていないと思います。 セッションがカスタムクラスの場合は、次の2つの方法を記述する必要があります。その場合、そのアーカイブは機能しません。
コード:
Objective Cのバージョン:
- (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
スウィフトバージョンにそれらのデータを設定することができます。
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")
}
私はそれがあなたを助けてくれることを願っています。私が思う...
'session'は何ですか? – Aaron
NSUserDefaultsは、NSString、NSNumber、NSDate、NSArray、NSDictionary、NSDataの各データ型をサポートします。 http://stackoverflow.com/questions/37980432/swift-3-save-and-retrieving-custom-object-from-userdefaults – Rivendell