Почему вы делаете это на удачу?
self.activityArray.removeAll ()
При следующем вызове этой функции вы будете индексировать в массив
"activity_id": activityArray [sender.tag] .id!
Но он будет пустым в зависимости от кода, который вы показали
Если activityArray
меняется и кажется, что он используется для строк таблицы, вам нужно вызвать tableView.reloadData()
, чтобы очистить таблицу
Редактировать - после просмотра обновленного кода.
Вы неправильно поняли
- Вы удаляете данные, прежде чем узнаете, есть ли у вас новые данные
- Вы перезагружаете данные в фоновом потоке - они всегда должны быть в основном потоке
Итак,
- Удалить строку
self.activityArray.removeAll()
в liked(sender:)
- Добавьте эту строку сюда
if response.result.isSuccess {
let ActivityJSON : JSON = JSON(response.result.value!)
//// HERE is where we know we are replacing the data
self.activityArray.removeAll()
let activityData = ActivityJSON["data"].arrayValue
let commentData = ActivityJSON["data"].arrayValue
И, наконец,
self.tableView.reloadData()
self.refreshControl.endRefreshing()
Этот код должен быть таким
DispatchQueue.main.async {
self.tableView.reloadData()
self.refreshControl.endRefreshing()
}
Поскольку сетевые вызовы, вероятно, не завершаются в основном потоке, но весь код пользовательского интерфейса должен быть в основном потоке.
РЕДАКТИРОВАТЬ: Как отметил Клаус в своем комментарии, лучшим подходом может быть использование deleteRows / insertRows и executeBatchUpdates
Я рекомендую вам сначала получить все, что работает с reloadData () - затем прочитайте документы Apple для https://developer.apple.com/documentation/uikit/uitableview/1614960-deleterows и https://developer.apple.com/documentation/uikit/uitableview/1614879-insertrows и https://developer.apple.com/documentation/uikit/uitableview/2887515-performbatchupdates и, возможно, посмотрите этот урок: https://www.youtube.com/watch?v=MC4mDQ7UqEE
Если вы сделаете это таким образом - особенно когда вы не перезагружаете всю таблицу - iOS сделает намного меньше работы и сделает более качественную анимацию по умолчанию.