在Swift / iOS中从NSUserDefaults中删除UITableView中的行和更新数组的正确方法

时间:2016-09-21 19:48:52

标签: ios arrays swift uitableview nsuserdefaults

UITableView删除行并从NSUserDefaults更新数组的正确方法是什么?

在以下示例中,我从NSUserDefaults读取数据并向UITableView提供其内容,我还允许用户删除{{1}中的项目我不确定何时读取和写入UITableView,因此只要删除一行,表就会更新。如您所见,我首先在NSUserDefaults方法中读取数组并将其重新保存在viewDidLoad方法中。使用此方法,删除行时,我的表不会重新加载。

commitEditingStyle

这通常如何处理?

由于

1 个答案:

答案 0 :(得分:1)

基本上它是正确的,但是如果有东西被删除,你应该只保存用户默认值。

if editingStyle == UITableViewCellEditingStyle.Delete {
    array.removeAtIndex(indexPath.row)
    tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
    let userDefaults = NSUserDefaults.standardUserDefaults()
    userDefaults.setObject(array, forKey: "myArrayKey")
}

不需要读取数组,不推荐使用。

cellForRowAtIndexPath重用单元格时,您需要在Interface Builder中指定标识符。

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) 

必须在类

的顶层声明数据源数组
var array = [String]()

然后在viewDidLoad中分配值并重新加载表视图。

override func viewDidLoad() {
    super.viewDidLoad()

    let userDefaults = NSUserDefaults.standardUserDefaults()
    guard let data = userDefaults.objectForKey("myArrayKey") as? [String] else {
        return 
    }
    array = data
    tableView.reloadData()
}