2015-07-18 3 views
0

У меня есть 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 ГБ, пока симулятор не сработает.

Я считаю, что это связано с многопоточными, но я не могу сузить точный вопрос, так как я помещаю свои важные материалы в основной поток.

ответ

0

Проблема заключалась в том, чтобы сделать аксессуар вида ячейки активным индикатором, а затем удалить его и перезагрузить его во время отхода. Я не мог понять, как сохранить его там и остановить многопоточность, но я остановился на успехе AlertView. Если у кого-то есть решение, я бы хотел узнать, как это исправлено.

Смежные вопросы