После удаления / удаления массива он возвращается при обновлении

#ios #arrays #swift #uitableview

#iOS #массивы #swift #uitableview

Вопрос:

У меня есть две кнопки в моей tableViewCell, которые подтверждают и игнорируют, эти две кнопки должны удалять ячейку при нажатии, чтобы она успешно удаляла ячейку, но когда я обновляю ее, она возвращается. Как я могу навсегда удалить данные в массиве при нажатии игнорировать или подтвердить.

Сначала массив был исключительно в activityArray, но мне нужно отфильтровать его, чтобы получить ожидающую активность.

         if activities.count > 0 {
            let filtered = activities.filter { $0.activityTypeAction == .FriendRequest || $0.activityTypeAction == .EventRSVPInvite }
            if self.kCurrentPage == 0 {
                self.activityArray.removeAll()
                self.pendingActivityArray.removeAll()
            }
            self.activityArray.append(contentsOf: activities)
            self.pendingActivityArray.append(contentsOf: filtered)
        }
  

Вот как я удаляю ячейку.

                 cell.onClinkedIgnoreCallback = {
                    self.pendingActivityArray.remove(at: indexPath.row)
                    self.NotificationTableView.deleteRows(at: [indexPath], with: .left)
                    self.NotificationTableView.reloadData()
                }
                cell.onClickedConfirmCallback = {
                    self.pendingActivityArray.remove(at: indexPath.row)
                    self.NotificationTableView.deleteRows(at: [indexPath], with: .left)
                    self.NotificationTableView.reloadData()
                }
  

Комментарии:

1. Как вы обновляете данные? Путем перехода от одного представления к другому или перезагрузки табличного представления?

2. @KrunalNagvadia я перезагружаю tableview. у меня есть это if (indexPath.row == activityArray.count - 1) { loadMoreActivity() } , где в моем loadMoreActivity есть следующий if activities.count > 0 {....} приведенный выше код.

3. Не связано, но никогда не вызывается reloadData сразу после deleteRows . Удаление строк обновляет представление таблицы. И есть isEmpty для типов коллекций и строк, которые более эффективны, чем .count == 0

Ответ №1:

вам не нужно вызывать эту функцию для обновления, потому что она снова заполняет данные в соответствующих массивах, поэтому, если вы хотите обновить его, просто вызовите tableview.reloadData()

Комментарии:

1. я не буду вызывать loadMoreActivity()?

2. Только один раз, чтобы назначить данные массивам

3. я этого не понимаю. у меня есть ActivityArray, тогда мой pendingArray зависит от него, поэтому каждый раз, когда я перезагружаю / обновляю представление, мой pendingArray копирует мой ActivityArray есть ли способ, чтобы мой pendingArray не влиял на каждый раз, когда я обновляюсь?

4. установите флажок в pendingarray в loadMoreActivity () в соответствии с вашими потребностями, чтобы он не обновлялся, если вам это не нужно

5. так, например, у меня есть это let filtered = activities.filter { $0.activityTypeAction == .FriendRequest || $0.activityTypeAction == .EventRSVPInvite } , могу ли я сделать что-то подобное filtered.removeAll(where: {$0.activityTypeAction == .FriendAccept} ) , тогда я добавлю это self.pendingActivityArray.append(contentsOf: filtered)