У меня есть UITableView
с некоторыми действиями смахивания. Один из них представляет лист действий через UIAlertController
и позволяет пользователю изменять категорию UITableViewCell
, заставляя ячейку появляться в другом разделе.
Я пытаюсь добиться перезагрузки tableView после выбор был сделан, но кажется, что предупреждение вызывается асинхронно. Может ли кто-нибудь помочь мне понять стек вызовов и куда поставить вызов tableview.reloadData()
?
let switchTypeAction = UIContextualAction(style: .normal, title: nil) { [weak self] (_,_,success) in
let ac = UIAlertController(title: "Change type", message: nil, preferredStyle: .actionSheet)
for type in orderItem.orderItemType.allValues where type != item.type {
ac.addAction(UIAlertAction(title: "\(type.prettyName)", style: .default, handler: self?.handleChangeType(item: item, type: type)))
}
ac.addAction(UIAlertAction(title: "Cancel", style: .cancel))
self?.present(ac, animated: true)
tableview.reloadData()
success(true)
}
func handleChangeType(item: orderItem, type: orderItem.orderItemType) -> (_ alertAction:UIAlertAction) -> (){
return { alertAction in
item.type = type
}
}
Я бы предположил, что вызовы выполнялись в этом порядке, но при отладке я вижу, что self?.present(ac, animated: true)
фактически выполняется после блока, поэтому сначала выполняется перезагрузка и ответ об успешном выполнении. Имеет ли это какое-либо отношение к закрытию, являющемуся @escaping?