我有数组的初始化
var defaults = NSUserDefaults.standardUserDefaults()
var initObject: [CPaymentInfo]? = defaults.objectForKey("paymentData") as? [CPaymentInfo]
if initObject == nil {
initObject = [CPaymentInfo]()
defaults.setValue(initObject, forKey: "paymentData")
}
defaults.synchronize()
我有 Controller ,它包含两个文本标签和两个按钮:保存和取消(都调用 segue)
if sender as? UIBarButtonItem == saveButton {
var defaults = NSUserDefaults.standardUserDefaults()
var payments: [CPaymentInfo]? = defaults.objectForKey("paymentData") as? [CPaymentInfo]
var newPaymentItem: CPaymentInfo?
if discriptionField.hasText() {
newPaymentItem = CPaymentInfo(value: (valueField.text as NSString).doubleValue, discription: discriptionField.text)
} else {
newPaymentItem = CPaymentInfo(value: (valueField.text as NSString).doubleValue)
}
if let newPay = newPaymentItem {
payments?.insert(newPay, atIndex: 0)
}
defaults.setObject(payments, forKey: "paymentData")
}
但它不起作用并且应用程序崩溃。 我发现我可以在不更改的情况下将“付款”设置为 key 默认值中的新对象 (通过注释 block 和插入)。 我还发现,我只能用 setObject 方法注释行,应用程序也可以工作。我怎样才能做我想做的事?
2015-07-14 20:34:34.403 cash app[15156:1494701] Property list invalid for format: 200 (property lists cannot contain objects of type 'CFType') 2015-07-14 20:34:34.404 cash app[15156:1494701] Attempt to set a non-property-list object ( "cash_app.CPaymentInfo" ) as an NSUserDefaults/CFPreferences value for key paymentData 2015-07-14 20:34:34.409 cash app[15156:1494701] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object ( "cash_app.CPaymentInfo" ) for key paymentData'
最佳答案
答案在错误信息中:
Attempt to insert non-property list object ( "cash_app.CPaymentInfo" ) for key paymentData'
您不能将任意类放入属性列表(例如 NSUserDefaults
)。有一个特定的可接受类列表。如果您有其他类要存储,则需要将它们转换为可接受的类。
有关将非属性列表类保存为用户默认值的文档,请参阅 Storing NSColor in UserDefaults .虽然那篇文章关注的是 NSColor
,但它适用于任何符合 NSCoding
的对象。另请参阅 Introduction to Property Lists 处的注释.
关于ios - 无法在数组中插入对象,我想将其添加到用户默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31409443/