ios - TableView Segue 到新 ViewController 不能工作两次

标签 ios multithreading swift uitableview swift2

我有一个 TableViewController,其中选择一行会进行网络调用,显示 ActivityIndi​​cator,并在网络调用的完成 block 中停止指示器并执行推送转场。

在测试中,我发现当转到新的 View Controller 、返回并选择另一行时,它会显示事件指示器,但永远不会停止或调用推送转场。 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)
                })
            }
    }
}

所以我设置了断点,它实际上是第二次进入完成 block 并调用它来停止指示器,重新加载该行,取消选择该行,重新启用 tableView userInteraction 并执行 segue。它也调用了我的prepareForSegue,但一旦完成,它就只是保持指示器仍在旋转,并且RAM使用量飙升至近2GB,直到模拟器崩溃。

我相信这与多线程有关,但我无法缩小确切的问题范围,因为我将重要的东西放在主线程上。

最佳答案

问题与将单元格的accessoryView设为activityIndi​​cator然后将其删除并在segue离开时重新加载所有内容有关。我不知道如何将其保留在那里并停止多线程问题,但我选择了进度警报 View 。如果有人有解决方案,我很想知道这是如何解决的。

关于ios - TableView Segue 到新 ViewController 不能工作两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494611/

相关文章:

ios - 如何在 Swift 中遵守 Strideable 协议(protocol)?

c++ - 重新哈希时锁定 HashMap

python - 在时间段 Y 内运行 X 个 Python 线程

ios - 如何在 TableViewcell 中为 Swift 保存 Firebase key

ios - 将 NSArray 值转换为 int

ios - 在启动异步请求后如何保留对 UICollectionViewCell 的引用?

ios - 人们如何使用 React Native 处理 iOS 中的 "recent app"箭头?

java - 强制终止卡在某个方法的 API 调用上的线程

ios - 在 iOS 的 swift 中用纯文本(Android 格式)创建属性字符串

ios - 如何让按钮执行动画?