【问题标题】:NSUserDefaults arrayForKey value of anyObject has no member removeAtIndex (Swift)anyObject 的 NSUserDefaults arrayForKey 值没有成员 removeAtIndex (Swift)
【发布时间】:2016-08-29 17:08:45
【问题描述】:

我正在使用 NSUserDefaults 来存储(字符串)数组,并且在加载它时,它似乎被解释为 AnyObject 而不是数组。我不明白这是怎么可能的,因为我使用 arrayForKey 方法作为我的默认方法,我认为它应该返回一个数组?

我得到的确切错误是:

“[AnyObject]?”类型的值没有成员“removeAtIndex”

发生在shoppingListDefaults.arrayForKey("ShoppingList").removeAtIndex(indexPath.row)

let shoppingListDefaults = NSUserDefaults.standardUserDefaults()
let deleteAction = UITableViewRowAction(style: .Normal, title: "Delete") { (rowAction:UITableViewRowAction, indexPath:NSIndexPath) -> Void in
        shoppingListDefaults.arrayForKey("ShoppingList").removeAtIndex(indexPath.row)
        self.slItems.reloadData()   // `slItems` is the IBOutlet for a UITableView
    }
deleteAction.backgroundColor = UIColor.redColor()
return [deleteAction]

【问题讨论】:

    标签: ios arrays swift persistence nsuserdefaults


    【解决方案1】:

    arrayForKey 返回一个可选项,因此您必须先将其解包,然后才能对其调用其他任何内容。您也不能直接编辑从默认值获得的数组,因为它是不可变的。您必须编辑数组,然后使用更新数组更新默认值。

    试试:

    if var list = shoppingListDefaults.arrayForKey("ShoppingList") {
        list.removeAtIndex(indexPath.row)
        shoppingListDefaults.setArray(list, forKey: "ShoppingList")
    }
    

    【讨论】:

      【解决方案2】:

      这个数组是不可变的。您需要从默认值中检索它,删除对象,并将修改后的数组设置回默认值。

      【讨论】:

        猜你喜欢
        • 2018-07-16
        • 1970-01-01
        • 2015-01-09
        • 1970-01-01
        • 2014-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多