У меня есть кнопка accept и deny на моей ячейке tableview. Когда пользователь нажимает кнопку deny, он удаляет данные из разбора, а также перезагружает таблицу. Однако, когда я добираюсь до последнего запроса, нажатие deny удаляет данные из Parse, но ячейка не исчезает.Удалить последнюю ячейку в uitableview с кнопки swift
Для контекста У меня есть массив PFObject называется var requests = [PFObject]()
Вот мой код для кнопки
В моей cellForRowIndexPath
cell.declineBtn.addTarget(self, action: "declineRequest:", forControlEvents: .TouchUpInside)
Тогда я реализовать функцию declineRequest
func declineRequest(sender: UIButton) {
var cell: NotificationsTableViewCell = sender.superview!.superview as! NotificationsTableViewCell
let indexPath = self.tableView.indexPathForRowAtPoint(cell.center)!
let innerP1 = NSPredicate(format: "sender = %@ AND postId = %@ ", cell.requesterEmailLabel.text! , cell.postIdLabel.text!)
var innerQ1: PFQuery = PFQuery(className: "Requests", predicate: innerP1)
var query = PFQuery.orQueryWithSubqueries([innerQ1])
query.getFirstObjectInBackgroundWithBlock{
(object:AnyObject? , error:NSError?) -> Void in
if(error == nil){
object!.deleteInBackground();
loadNotifications(); // self.tableView.reloadData() is in this call
}
}
}
}
Мне нужно как-то сказать таблице, что массив данных пуст. Дайте мне знать, если мне нужно добавить больше контекста. Я не пытаюсь использовать commitEditingStyle editingStyle
, вместо этого хочу, чтобы кнопка позаботилась об удалении.
EDIT # 2 После попытки удаления в фоновом режиме с блоком данных по-прежнему будет удален, но табличном еще оленья кожа удалить последнюю строку, остающегося в виде таблицы.
Вот код
query.getFirstObjectInBackgroundWithBlock{
(object:AnyObject? , error:NSError?) -> Void in
if(error == nil){
object!.deleteInBackgroundWithBlock {(success: Bool, error: NSError?)-> Void in
if (success) {
self.loadNotifications()
println("Load Notifications")
}
else {
println("cannot delete")
}
}
}
}
так что я имел object.deleteInBackgroundWithBlock, который я заменил с объектом! .deleteInBackground(), но у меня была такая же проблема, вы имеете в виду для блока, чтобы быть вне getFirstObjectInBackgroundWithBlock? или внутри него? Нужно ли сначала найти объект и удалить его? или я могу выполнить query.deleteInBackgroundWithBlock сразу? – kareem
Я имею в виду внутри getFirstObjectInBackgroundWithBlock, как только ошибка равна нулю, тогда вызовите [object deleteInBackgroundWithBlock с обработчиком завершения, внутри этого обработчика завершения перезагрузите данные. – Vizllx
Хорошо, попробуйте еще раз, я пробовал это раньше, если он не работает плохо обновить мой исходный код! и дайте знать – kareem