【发布时间】:2014-12-01 05:15:29
【问题描述】:
我正在尝试通过制作一个小型应用程序来了解 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 做的所有事情都几乎不兼容......
谢谢!
【问题讨论】:
-
真的吗?没有人可以帮助将对象数组保存为 NSUser 默认值?我很乐意接受任何建议,即使它们与 NSUser 默认值无关。
标签: arrays swift tuples nsdata