我使用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]
答案 0 :(得分:1)
arrayForKey
返回一个可选项,因此您必须先将其解包,然后再调用其他任何内容。您也无法直接编辑从默认值中获取的数组,因为它是不可变的。您必须编辑数组,然后使用更新数组更新默认值。
尝试:
if var list = shoppingListDefaults.arrayForKey("ShoppingList") {
list.removeAtIndex(indexPath.row)
shoppingListDefaults.setArray(list, forKey: "ShoppingList")
}
答案 1 :(得分:0)
此数组是不可变的。您需要从默认值中检索它,删除对象,并将修改后的数组设置为默认值。