让tableView删除从NSUserDefaults中删除项目 - 如何将这两个功能结合在一起?

时间:2015-01-28 20:05:52

标签: ios xcode uitableview swift nsuserdefaults

我想让我的应用程序的用户通过在Cell上向左滑动并按“删除”,从表格视图中删除NSUserDefaults中的项目。我知道这两个功能,但我不知道如何将它们组合在一起,以便“删除滑动”影响NSUserDefaults中的变量。也许有人可以帮助我。谢谢。

此功能应允许用户访问tableView中的删除按钮:

func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool {
    return true
}

func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) {
    if (editingStyle == UITableViewCellEditingStyle.Delete) 
}

,该功能应该从NSUserDefaults中删除项目:

@IBAction func deleteItem(sender: AnyObject) {

    var userDefaults:NSUserDefaults = NSUserDefaults.standardUserDefaults()

    var itemListArray:NSMutableArray = userDefaults.objectForKey("itemList") as NSMutableArray

    var mutableItemList:NSMutableArray = NSMutableArray()

    for dict:AnyObject in itemListArray{
        mutableItemList.addObject(dict as NSDictionary)
    }

    mutableItemList.removeObject(toDoData)

    userDefaults.removeObjectForKey("itemList")
    userDefaults.setObject(mutableItemList, forKey: "itemList")
    userDefaults.synchronize()

}

1 个答案:

答案 0 :(得分:0)

首先,让我们将mutableItemList更改为一个实例变量,我们将其用作表的数据源。或者,您可以创建一个新的实例变量并相应地进行设置。

var mutableItemList: NSMutableArray!

然后,要删除我们调用deleteItem函数。

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {
        // Delete the row from the data source
        self.deleteItem(mutableItemList[indexPath.row])
        // show fancy fade animation to remove the cell from the table view
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
    }
} 

您还可以简化deleteItem功能。您不需要重建阵列并从NSUserDefaults中删除对象。您可以删除该对象,然后设置更新的数组,它会覆盖那里的任何内容。

func deleteItem(sender: AnyObject) {        
    mutableItemList.removeObject(sender)

    var userDefaults:NSUserDefaults = NSUserDefaults.standardUserDefaults()        
    userDefaults.setObject(mutableItemList, forKey: "itemList")
    userDefaults.synchronize()
}