UITableView 中的单元格在 iOS 中选择之前不会更新(swift)

Posted

技术标签:

【中文标题】UITableView 中的单元格在 iOS 中选择之前不会更新(swift)【英文标题】:Cell in UITableView doesn't update until selected in iOS (swift) 【发布时间】:2016-05-17 10:17:21 【问题描述】:

我正在使用 Parse 开发一个应用程序,它有一个表格视图,其中的单元格包含一个标签,该标签有来自 Facebook 的共同朋友,我的问题是表格中的所有内容都可以正常工作,但共同朋友标签,除非我选择行(当我选择行时,数字立即出现)。这是我获取共同朋友并在单元格中设置标签的代码:

let facebookContext = driverobj?.objectForKey("facebookContext") as! String
let user: PFUser = PFUser.currentUser()!
let access_token = user.valueForKey("authData")?.valueForKey("facebook")?.valueForKey("access_token") as! String
let usercontexturl: NSURL = NSURL(string: "https://graph.facebook.com/\(facebookContext)/mutual_friends?access_token=\(access_token)")!

let myrequest: NSURLRequest = NSURLRequest(URL: usercontexturl)
let mysession = NSURLSession.sharedSession()
let task = mysession.dataTaskWithRequest(myrequest)  data, response, error in
        print("Task completed")
        do 
             let jsonresult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)
             cell.mutualFriendsLabel?.text = (jsonresult.valueForKey("summary")?.valueForKey("total_count"))!.stringValue + " Mutual Friends"

         catch 
             print(error)
        

task.resume()

此代码在 cellForRowAtIndexPath 方法中,didSelectRowAtIndexPath 方法为空。

【问题讨论】:

【参考方案1】:

传递给dataTaskWithRequest 的块可能没有在主线程上执行,这可能导致出现这些类型的症状。尝试对主线程执行 UI 更新,例如:

dispatch_async(dispatch_get_main_queue()) 
    cell.mutualFriendsLabel?.text = (jsonresult.valueForKey("summary")?.valueForKey("total_count"))!.stringValue + " Mutual Friends"

【讨论】:

【参考方案2】:

我认为您需要像这样更新主队列上的 UI:

dispatch_async_(your_queue) 
    task.response 
        //handle data
        dispatch_async(dispatch_get_main_queue()) 
            //update UI, etc. change label text
        
    

【讨论】:

以上是关于UITableView 中的单元格在 iOS 中选择之前不会更新(swift)的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 UITableView 单元格在选中时会跳转

iOS - 使 UITableView 与自定义单元格在按钮单击时可编辑

为啥我的 UITableView 单元格在滚动时重叠?

UITableView 中的自定义单元格在滑动编辑后立即移动

带有 SearchView 的 UITableView 使新单元格在搜索时与旧单元格重叠

UITableView 与导航栏不对齐(单元格在旋转时卡在下面)