Нека 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