ios - 无法在数组中插入对象,我想将其添加到用户默认值

标签 ios swift cocoa-touch

我有数组的初始化

    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/

相关文章:

ios - 另一个 UINavigationController 内的 UITabBarController 内的 UINavigationController 的问题

ios - 如何获得核心定位工作

ios - Firebase 通知在 ios 上不起作用

ios - 自定义 UITableViewCell 中的 contentView 宽度错误?

ios - Swift 一次删除多个对象解析服务器

ios - UITableViewCell.imageView 给出内存警告?

iphone - 如何优化包含带有 CATiledLayer 层的 subview 的 UIView 的绘制

ios - 滚动表格时如何将inputView移动到键盘上方

ios - 使用 Instruments 分析 Swift,_swift_retain_ 到底是什么?

ios - 类数据类型的持久化数据