Преобразование Swift Array в NSData для постоянного хранилища NSUserDefaults.StandardUserDefaults
Я пытаюсь разобраться со Swift (после того, как я достаточно компетентен в Obj-C), создав небольшое приложение. Я хотел бы использовать NSUserDefaults для постоянного сохранения небольшого объема данных, но у меня проблемы.
Я инициализирую пустой массив кортежей следующим образом:
var costCategoryArray: [(name:String, defaultValue:Int, thisMonthsEstimate:Int, sumOfThisMonthsActuals:Int, riskFactor:Float, monthlyAverage:Float)]=[]
Когда в массиве есть запись, я хочу сохранить массив в NSUserDefaults со стандартным кодом Swift, например так:
NSUserDefaults.standardUserDefaults().setObject(costCategoryArray, forKey: "financialData")
NSUserDefaults.standardUserDefaults().synchronize()
Я получаю сообщение о том, что массив кортежей не соответствует классу AnyObject. Поэтому я попытался превратить его в NSData:
var myNSData: NSData = NSKeyedArchiver.archivedDataWithRootObject(costCategoryArray)
var myUnarchivedData: Array = NSKeyedUnarchiver.unarchiveObjectWithData(myNSData)
... но я получаю ту же ошибку при преобразовании в NSData. Объект, удерживаемый моим массивом, не соответствует AnyObject. Я также пытался на каждом этапе сделать его неизменным, используя:
let immutableArray = costCategoryArray
Я также попытался создать класс вместо использования кортежей, которые, как я понял, заставили бы его соответствовать AnyObject:
class costCategory : NSObject {
var name : String
var defaultValue : Int
var thisMonthsEstimate : Int
var sumOfThisMonthsActuals : Int
var riskFactor : Float
var monthlyAverage : Float
init (name:String, defaultValue:Int, thisMonthsEstimate:Int, sumOfThisMonthsActuals:Int, riskFactor:Float, monthlyAverage:Float) {
self.name = name
self.defaultValue = defaultValue
self.thisMonthsEstimate = thisMonthsEstimate
self.sumOfThisMonthsActuals = sumOfThisMonthsActuals
self.riskFactor = riskFactor
self.monthlyAverage = monthlyAverage
}
}
Но новая ошибка:
«Список свойств, недопустимый для формата: 200 (списки свойств не могут содержать объекты типа« CFType »)»
В чем проблема с массивом кортежей? Почему я не могу хранить массив объектов класса? Я чувствую, что мне нужен совет специалиста, поскольку все, что я пытаюсь сделать со Swift, в значительной степени несовместимо ...
Спасибо!