2016-09-17 10 views
-1

私はSwift3にNSUSerDefaultsに私のデータを保存したい:Swift 3のNSUserDefaultsにデータを保存する方法は?

func a() { 
    let userDefaults = UserDefaults.standard 
    let sessionData = NSKeyedArchiver.archivedData(withRootObject: session) 
    userDefaults.set(session, forKey: "SpotifySession") 
    userDefaults.synchronize() 
} 

が、それは私がこれを修正するにはどうすればよい

NSKeyedArchiver.archivedData(withRootObject: session) 

にクラッシュしますか?

+2

'session'は何ですか? – Aaron

+0

NSUserDefaultsは、NSString、NSNumber、NSDate、NSArray、NSDictionary、NSDataの各データ型をサポートします。 http://stackoverflow.com/questions/37980432/swift-3-save-and-retrieving-custom-object-from-userdefaults – Rivendell

答えて

1

セッションクラスでメソッドをエンコードしてデコードしていないと思います。 セッションがカスタムクラスの場合は、次の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") 
} 

私はそれがあなたを助けてくれることを願っています。私が思う...

+0

あなたはobjective-cで解決策を書いています。問題は速いコーディングバージョンを要求しています –

+1

@AmrAngry、ありがとうございます。私はその時までに客観的なCのヒントを与えていただけです。しかし、心配する必要はありません。私はSwiftを使って答えを更新しました。 – Janmenjaya

-1

をコーディング ハッピー、これはNSUserDefaultsにデータを保存するための正しい方法である:

let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject("Coding Explorer", forKey: "userNameKey") 
+1

NSUserDefaultsにデータを保存するのは何百回も前から説明されていますが、あなたの答えは何も追加しません。さらに、OPは特にあなたが与えないスウィフト3バージョンを求めています... – Moritz

関連する問題