Сохранить tableViewItem по умолчанию, когда tableViewCell проведен влево - PullRequest
0 голосов
/ 05 октября 2019

Я следовал Этот ответ, чтобы сохранить мои данные в массиве, когда проведешь пальцем влево и нажмет любимую кнопку. До сих пор я сделал это

    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

    let favorite = UITableViewRowAction(style: .normal, title: "Favorite") { (action, indexPath) in
        var favorites : [String] = []
        let defaults = UserDefaults.standard
        if let favoritesDefaults : AnyObject? = defaults.object(forKey: "favorites") as AnyObject {
            favorites = favoritesDefaults! as! [String]
        }

        let cell   = self.myTableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! TableViewCell
        favorites.append(itemList[indexPath.row])
        defaults.set(favorites, forKey: "favorites")
        defaults.synchronize()
        }
    return [favorite]
    }

Список массивов

   var itemList = [ "item1", "item2", "item3", "item4", "item5", 
                  "item6", "item7", "item8", "item" , "item", "Gobbling"]

, когда я нажимаю кнопку избранного, появляется ошибка

Невозможно привести значениетипа «NSNull» (0x22e386f28) в «NSArray» (0x22e386960)

1 Ответ

3 голосов
/ 05 октября 2019

Не выгружать ячейки вне cellForRowAt. Никогда не делай этого. Ячейка все равно не используется.

Используйте выделенный API array(forKey, чтобы прочитать массив из UserDefaults и привести тип к ожидаемому типу, а не к неопределенному Any(Object)

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

    let favorite = UITableViewRowAction(style: .normal, title: "Favorite") { [unowned self] (action, indexPath) in
        let defaults = UserDefaults.standard
        var favorites = defaults.array(forKey: "favorites") as? [String] ?? []
        favorites.append(self.itemList[indexPath.row])
        defaults.set(favorites, forKey: "favorites")
    }
    return [favorite]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...