我正在尝试通过制作一个小应用程序来了解 Swift(在相对熟悉 Obj-C 之后)。我想使用 NSUserDefaults 持久保存少量数据,但我遇到了问题。
我初始化一个空的元组数组,如下所示:
var costCategoryArray: [(name:String, defaultValue:Int, thisMonthsEstimate:Int, sumOfThisMonthsActuals:Int, riskFactor:Float, monthlyAverage:Float)]=[]
当数组有一个条目时,我想使用标准 Swift 代码将数组保存到 NSUserDefaults,如下所示:
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 做的一切都几乎不兼容......
Thanks!