あなたはあなたの方法がNSCoding
に準拠するようにする必要があり、単一のオブジェクトとして、あなたのオブジェクトを保存したい場合:
class HomeStats: NSObject, Mappable, NSCoding {
// add to your class HomeStats
required init?(coder aDecoder: NSCoder) {
todayText = aDecoder.decodeObjectForKey(todayText) as! String
pointsText = aDecoder.decodeObjectForKey(pointsText) as! String
todayActivitiesText = aDecoder.decodeObjectForKey(todayActivitiesText) as! String
totalPointsText = aDecoder.decodeObjectForKey(totalPointsText) as! String
rewardsText = aDecoder.decodeObjectForKey(rewardsText) as! String
myStatsText = aDecoder.decodeObjectForKey(myStatsText) as! String
motivationalMessage = aDecoder.decodeObjectForKey(motivationalMessage) as! String
todaySteps = aDecoder.decodeObjectForKey(todaySteps) as! String
todayStepPoints = aDecoder.decodeObjectForKey(todayStepPoints) as! String
stepsText = aDecoder.decodeObjectForKey(stepsText) as! String
todayTotalPoints = aDecoder.decodeDoubleForKey(todayTotalPoints) as! Double
allPoints = aDecoder.decodeObjectForKey(allPoints) as! String
userRegistrationDate = aDecoder.decodeObjectForKey(userRegistrationDate) as! String
firstTrackerConnectionDate = aDecoder.decodeObjectForKey(firstTrackerConnectionDate) as! String
userID = aDecoder.decodeIntForKey(userID, forKey: "userID") as! Int
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(todayText, forKey: "todayText")
aCoder.encodeObject(pointsText, forKey: "pointsText")
aCoder.encodeObject(todayActivitiesText, forKey: "todayActivitiesText")
aCoder.encodeObject(totalPointsText, forKey: "totalPointsText")
aCoder.encodeObject(rewardsText, forKey: "rewardsText")
aCoder.encodeObject(myStatsText, forKey: "myStatsText")
aCoder.encodeObject(motivationalMessage, forKey: "motivationalMessage")
aCoder.encodeObject(todaySteps, forKey: "todaySteps")
aCoder.encodeObject(todayStepPoints, forKey: "todayStepPoints")
aCoder.encodeObject(stepsText, forKey: "stepsText")
aCoder.encodeDouble(todayTotalPoints, forKey: "todayTotalPoints")
aCoder.encodeObject(allPoints, forKey: "allPoints")
aCoder.encodeObject(userRegistrationDate, forKey: "userRegistrationDate")
aCoder.encodeObject(firstTrackerConnectionDate, forKey: "firstTrackerConnectionDate")
aCoder.encodeInteger(userID, forKey: "userID")
}
}
// save and load your serialised file wherever you wish with something like this:
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let documentsDirectory = paths[0]
let filePath = documentsDirectory.appendingPathComponent("filename")
// serialise and save your instance
func storeHomeStats(homeStats: HomeStats) {
let data = NSKeyedArchiver.archivedData(withRootObject: homeStats)
do {
try data.write(to: filePath)
} catch let error as NSError {
print("Couldn't write file: \(error)")
}
}
// deserialise your instance
func loadHomeStats() -> HomeStats? {
return NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? HomeStats
}
http://stackoverflow.com/questions/2315948/how-to-store-custom-objects -in-nsuserdefaults これを見てください –
私はこれらの答えを見ましたが、私はeveryThingを別のキーで保存する必要があるため、私には最適化されたアプローチではないようです。 Wholeオブジェクトをキーに対して保存して、それを元に戻したい。 – Byte
NSUserDefaultsのみ を格納することができる - にNSArray - たNSData - NSDictionaryの - のNSNumber - NSStringの さらには、NSArrayのまたはNSDictionaryのは、上記のタイプを含んでいなければなりません。したがって、構造体をNSDictionaryに変換するか、代わりにJSONレスポンスを保存する必要があります – Roman