2017-05-30 22 views
0

我有一個模型類User,我想在UserDefaults如何使用靜態自實例在UserDefaults中保存模型類?

import UIKit 

class User: NSObject { 

    var name:String! 
    var email:String! 
    var userId:String! 
    var phone:String! 
    var admin_status:String! 
    var social_code:String! 
    var token:String! 
    var otp:String! 
    var forget_otp:String! 
    var p_img:String! 
    var created:String! 
    var status:String! 

    static var currentUser:User = User() 

    override init() { 
     super.init() 
    } 

    required init(coder aDecoder: NSCoder) { 
     self.name = aDecoder.decodeObject(forKey: "name") as! String 
     self.email = aDecoder.decodeObject(forKey: "email") as! String 
     self.userId = aDecoder.decodeObject(forKey: "userId") as! String 
     self.phone = aDecoder.decodeObject(forKey: "phone") as! String 
     self.admin_status = aDecoder.decodeObject(forKey: "admin_status") as! String 
     self.social_code = aDecoder.decodeObject(forKey: "social_code") as! String 
     self.token = aDecoder.decodeObject(forKey: "token") as! String 
     self.otp = aDecoder.decodeObject(forKey: "otp") as! String 
     self.forget_otp = aDecoder.decodeObject(forKey: "forget_otp") as! String 
     self.p_img = aDecoder.decodeObject(forKey: "p_img") as! String 
     self.created = aDecoder.decodeObject(forKey: "created") as! String 
     self.status = aDecoder.decodeObject(forKey: "status") as! String 
    } 

    func encodeWithCoder(aCoder: NSCoder) { 
     aCoder.encode(name, forKey: "name") 
     aCoder.encode(email, forKey: "email") 
     aCoder.encode(userId, forKey: "userId") 
     aCoder.encode(phone, forKey: "phone") 
     aCoder.encode(admin_status, forKey: "admin_status") 
     aCoder.encode(social_code, forKey: "social_code") 
     aCoder.encode(token, forKey: "token") 
     aCoder.encode(otp, forKey: "otp") 
     aCoder.encode(forget_otp, forKey: "forget_otp") 
     aCoder.encode(p_img, forKey: "p_img") 
     aCoder.encode(created, forKey: "created") 
     aCoder.encode(status, forKey: "status") 
    } 

} 

代碼來保存,保存,並從UserDefaults

class func setUserDefault(ObjectToSave : AnyObject? , KeyToSave : String) 
    { 
     let defaults = UserDefaults.standard 

     if (ObjectToSave != nil) 
     { 

      defaults.set(ObjectToSave, forKey: KeyToSave) 
     } 

     UserDefaults.standard.synchronize() 
    } 

    class func getUserDefault(KeyToReturnValye : String) -> AnyObject? 
    { 
     let defaults = UserDefaults.standard 

     if let name = defaults.value(forKey: KeyToReturnValye) 
     { 
      return name as AnyObject 
     } 
     return nil 
    } 

保存

let user:User = User() 
        user.name = json["data"]["first_name"].string 
        user.email = json["data"]["email"].string 
        user.phone = json["data"]["phone"].string 
        user.social_code = json["data"]["social_code"].string 
        user.admin_status = json["data"]["admin_status"].string 
        user.otp = json["data"]["otp"].string 
        user.forget_otp = json["data"]["forget_otp"].string 
        user.p_img = json["data"]["p_img"].string 
        user.status = json["data"]["status"].string 
        user.userId = json["data"]["id"].string 
        user.created = json["data"]["created"].string 

        Utilities.setUserDefault(ObjectToSave: user, KeyToSave: "user") 

我也試過這個

let encodedData = NSKeyedArchiver.archivedData(withRootObject: user) 
        UserDefaults.standard.set(encodedData, forKey: "User") 

但它因爲static var currentUser:User = User()而崩潰

如何解決這個問題?

+0

您到目前爲止嘗試過什麼。你嘗試NSCoding –

+0

我寫的代碼,我正在使用,但我不知道該怎麼辦'static var currentUser:User = User()' –

+0

嘗試[this answer](https://stackoverflow.com/questions/43271947 /如何可以存儲自定義對象在nsuserdefaults) –

回答

2

至於NSCoding:你有錯誤的方法簽名。更改

func encodeWithCoder(aCoder: NSCoder) 

func encode(with aCoder: NSCoder) 

而且,你的對象應明確符合NSCoding協議:

class User: NSObject, NSCoding {...} 

至於UserDefaults,你不能存儲自定義在UserDefaults對象,只NSDataNSString,NSNumber,NSDateNSArrayNSDictionary(或Swift中的類似類型),請參閱documentation

0

有你在更換您此行嘗試,

static var currentUser:User = User() 

這一行,

static var currentUser:User! 
相關問題