У меня есть TableViewController, в котором выбор строки делает сетевой вызов, показывает ActivityIndicator, а в блоке завершения сетевого вызова останавливает индикатор и выполняет push-сег.TableView Segue для нового ViewController не работает дважды
В ходе тестирования я обнаружил, что при переходе к новому контроллеру представления, возвращении и выборе другой строки, он показывает индикатор активности, но никогда не останавливается или не называет push-сег. Код для didSelect:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
self.tableView.userInteractionEnabled = false
self.searchController?.active = false
self.idx = indexPath
let cell = tableView.cellForRowAtIndexPath(indexPath) as! CustomTableViewCell
cell.accessoryView = self.activityIndicator
self.activityIndicator.startAnimating()
self.networkingEngine?.getObjectById("\(objectId)", completion: { (object) -> Void in
if object != nil {
self.tableView.userInteractionEnabled = true
self.chosenObject = object
self.activityIndicator.stopAnimating()
self.tableView.reloadRowsAtIndexPaths([self.idx], withRowAnimation: .None)
self.tableView.deselectRowAtIndexPath(self.idx, animated: true)
self.performSegueWithIdentifier("segueToNewVC", sender: self)
}
else {
}
})
}
и моя сеть вызов с использованием Alamofire
func getObjectbyId(objectId: String, completion:(Object?) -> Void) {
Alamofire.request(Router.getObjectById(objectId: objectId))
.response { (request, response, data, error) -> Void in
if response?.statusCode != 200 {
completion(nil)
}
else if let parsedObject = try!NSJSONSerialization.JSONObjectWithData(data as! NSData, options: .MutableLeaves) as? NSDictionary {
let object = parsedObject["thing"]
dispatch_async(dispatch_get_main_queue(), {() -> Void in
completion(object)
})
}
}
}
Так что я сделал контрольные точки, и это на самом деле происходит в завершение блок во второй раз и назвав его, чтобы остановить индикатор, перезагрузить эту строку, отмените выбор строки, снова включите функцию tableView userInteraction и выполните сеанс. Он также вызывает мой метод подготовки, но как только он заканчивается, он просто сидит с индикатором, все еще вращающимся, а использование ОЗУ стремительно растет почти до 2 ГБ, пока симулятор не сработает.
Я считаю, что это связано с многопоточными, но я не могу сузить точный вопрос, так как я помещаю свои важные материалы в основной поток.