ios - 在我点击另一个选项卡并返回之前,tableView 不会更新 - swift

标签 ios swift xcode6

我是 iOS 的新手,我通过解析 JSON 数据从 Web 源动态填充 tableView 数据。但问题是当我第一次访问该选项卡时,它什么也没显示。在我访问另一个选项卡并返回后,它在 tableView 上正确显示数据。

这是我的代码

import UIKit

class BranchViewController: UITableViewController , UISearchBarDelegate, UISearchDisplayDelegate {

    var branches = [Branch]()
    var filteredBranch = [Branch]()
    var BranchArray = [BranchTable]()
    var BranchLocationArray = [BranchLocation]()


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.tableView!.delegate = self
        self.tableView!.dataSource = self

        let url = NSURL(string: "http://rana.ninja/branches.php")

        let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
            println(NSString(data: data, encoding: NSUTF8StringEncoding))
            var error: NSError?
            let jsonData: NSData = data /* get your json data */
            let json = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary

            if let name: AnyObject = json["name"]  {
                for var index = 0; index < name.count; ++index {
                    var Name : String  = name[index] as NSString
                    self.branches.append(Branch(name: Name))
                    println(Name)
                }
            }
        }

        task.resume()

        BranchArray =
            [BranchTable(BranchTitle: ["FirstFirst","SecondFirst","ThirdFirst"]),
                BranchTable(BranchTitle: ["FirstSecond","SecondSecond","ThirdSecond"]),
                BranchTable(BranchTitle: ["FirstThird","SecondThird","ThirdThird"]),
                BranchTable(BranchTitle: ["FirstFourth"])]

        BranchLocationArray = [BranchLocation(BranchLocationValues: ["asdfasd","asdfasd","asdfas"]),
            BranchLocation(BranchLocationValues: ["asdkljf","asdfasd","asdfas"]),
            BranchLocation(BranchLocationValues: ["asdkljf","asdfasd","asdfas"]),
            BranchLocation(BranchLocationValues: ["asdkljf","asdfasd","asdfas"])]

            // Reload the table
            self.tableView.reloadData()
            }

最佳答案

您需要在更新数据结构后调用tableView.reloadData。这必须在主线程中完成,因此:

 let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
     println(NSString(data: data, encoding: NSUTF8StringEncoding))
     var error: NSError?
     let jsonData: NSData = data /* get your json data */
     let json = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary

     if let name: AnyObject = json["name"]  {
         for var index = 0; index < name.count; ++index {
             var Name : String  = name[index] as NSString
             self.branches.append(Branch(name: Name))
             println(Name)
         }
     }
     // NOTE: Calling reloadData in the main thread
     dispatch_async(dispatch_get_main_queue()) {
         self.tableView.reloadData()
     }
}

关于ios - 在我点击另一个选项卡并返回之前,tableView 不会更新 - swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28782932/

相关文章:

ios - 找不到 RestKit.h 的错误

xcode - Xcode插件停止工作

swift - 如何将非托管 <CFData> 转换为 NSData?

ios - 新的 iTunes 连接界面——是否应该立即在 "Prerelease"上看到它?

ios - 在开始直播后获取 UITableView 来刷新用户

ios - 如何在接收设备上用另一个推送通知替换一个推送通知?

ios - 如何编辑添加到 Storyboard 中场景停靠栏的 float View ?

Swift 4 尝试使用 Realm 数据库对象作为实例变量

ios - 如何使自定义单元格中的 UILabel 显示保存在 UITableView 中的更改

ios - 向方法添加@objc 标志时出现 Xcode 编译器错误