Пусть tableView удалит пролистывание элементов из NSUserDefaults. Как объединить эти две функции?

Я хочу, чтобы пользователь моего приложения удалял элементы из NSUserDefaults из tableView, проводя влево по ячейке и нажимая "удалить". Я знаю обе функции, но не знаю, как свести их вместе в правильном порядке, чтобы «удалить свайп» влиял на переменную в 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()

}

person santa1    schedule 28.01.2015    source источник


Ответы (1)


Во-первых, давайте изменим 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()
}
person Ron Fessler    schedule 28.01.2015