![](/img/trans.png)
[英]Swift TableView segue to new ViewController with wrong index path (penultimate selection)
[英]TableView Segue to new ViewController does not work twice
我有一個TableViewController,在其中選擇一行進行網絡調用,顯示一個activityIndicator,然后在網絡調用的完成塊中,停止指示器並進行推送。
在測試中,我發現當轉到新的視圖控制器,返回並選擇另一行時,它顯示了活動指示器,但從未停止或調用推送命令。 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並執行segue。 它也調用了我的prepareForSegue,但是一旦完成,它就坐在指示器仍在旋轉的狀態下,直到模擬器崩潰之前,RAM的使用量已經飆升至近2GB。
我相信這與多線程有關,但是由於我將重要的東西放在主線程上,因此我無法縮小確切的范圍。
該問題與將單元的annexView設置為activityIndicator,然后將其刪除並重新裝入所有文件(同時隔離)有關。 我不知道如何將其保留在那里並停止多線程問題,但我選擇了一個進度AlertView。 如果有人有解決方案,我很想知道如何解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.