任何对象的NSUserDefaults arrayForKey值没有成员removeAtIndex(Swift)

时间:2016-08-29 17:08:46

标签: ios arrays swift persistence nsuserdefaults

我使用NSUserDefaults来存储数组(字符串),并且在加载它时,它似乎被解释为AnyObject而不是Array。我不明白这是怎么可能的,因为我使用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]

2 个答案:

答案 0 :(得分:1)

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

尝试:

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

答案 1 :(得分:0)

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