あなたは間違いなくすることができますあなたのUserDefaults
またはキーチェーンにオブジェクト全体を保存しても問題はありません。トリックはNSCoding
プロトコルに準拠させてから、NSKeyedArchiver
とNSKeyedUnarchiver
を使用して、格納できるData
オブジェクトとの間で変換します。心配しないでください、それはそれよりも複雑に聞こえます。 NSCoding
に準拠
は、おそらくあなたのBUYCustomerToken
クラスはすでにNSObject
の子孫であるので、あなたは途中でそこにいます。カスタムクラスをエンコードして(Data
に変換)、NSCoder
から自動的にデコードできるようにするには、いくつかのメソッドを追加するだけです。具体的には、encode(with coder: NSCoder)
とinit(coder aDecoder:NSCoder)
です。次に、コーダーのさまざまなencode()関数とdecode()関数を使用して、これらの処理を行います。encode()とdecode()はNSCoding
をサポートするオブジェクト(NSNumber
、String
、およびDate
を含む)で動作するため、ここでの作業が簡単になります。完成したコーディング可能クラスは次のようになります。
class BUYCustomerToken : NSObject, NSCoding {
var customerID: NSNumber!
var accessToken: String!
var expiry: Date!
override init() {
}
convenience init(customerID: NSNumber, accessToken: String, expiry: Date) {
self.init()
self.customerID = customerID
self.accessToken = accessToken
self.expiry = expiry
}
required init(coder aDecoder: NSCoder) {
customerID = aDecoder.decodeObject(forKey: "customerID") as! NSNumber
accessToken = aDecoder.decodeObject(forKey: "accessToken") as! String
expiry = aDecoder.decodeObject(forKey: "expiry") as! Date
}
func encode(with aCoder: NSCoder) {
aCoder.encode(customerID, forKey: "customerID")
aCoder.encode(accessToken, forKey: "accessToken")
aCoder.encode(expiry, forKey: "expiry")
}
override var description: String {
return "ID: \(customerID!), Token: \"\(accessToken!)\", Expires: \(expiry!)"
}
}
独自のカスタムメソッドを追加できます。 description
は厳密には必要ではありませんが、テストには便利です。
保存と今、あなたのクラスはNSCodingをサポートしていることを、あなたはそれを取得し、それをアーカイブし、それを保存することができUserDefaults
から取得します。
は、それを格納するために、あなたはそれがNSKeyedArchiver.archivedData(withRootObject)
を使用して(Data
オブジェクトに変換)アーカイブことから始めます。これはあなたのクラスがNSCoding
に準拠しているためです。 Data
オブジェクトを取得したら、set(value, forKey)
を使用してUserDefaults
に保存できます。
あなたはそれを取得したい場合は、あなたがそれを他の方法で行います。まずNSKeyedUnarchiver.unarchiveObject(with)
を使用してオブジェクトに戻すそれを回す、data(forKey)
を使用してUserDefaults
からData
オブジェクトを取得し、最終的にあなたのカスタムクラスにキャストします。
BUYCustomerToken
をロードしようとするコードは、UserDefaults
です。成功した場合は、説明を出力します。失敗した場合は、新しいトークンを作成して格納します。アクションでそれを見るためにあなたの最初のUIViewController
のviewDidLoad()
にこのコードを配置:出力があるので
if let customerTokenData = UserDefaults.standard.data(forKey: "myToken") {
let customerToken = NSKeyedUnarchiver.unarchiveObject(with: customerTokenData) as! BUYCustomerToken
print(customerToken)
} else {
print("No token stored. Launch again to see token.")
let customerToken = BUYCustomerToken(customerID: 999, accessToken: "some token", expiry: Date())
let tokenData = NSKeyedArchiver.archivedData(withRootObject: customerToken)
UserDefaults.standard.set(tokenData, forKey: "myToken")
}
あなたがそれを初めて実行するには、何も保存されたトークンがあります:なしトークンが保存されていない
。トークンを見るためにもう一度起動してください。
ID:
二時間、それが保存されたトークンと出力その説明を見つける999を、トークン: "いくつかのトークンが" 有効期限:2017年5月31日午前21時27分25秒を+0000
ありがとうございました。私はこれを見て、かなりあなたの方法を使用する前に、それを直視しました!明確な答えをありがとう! –