下载数据后重新加载NSTableView

时间:2016-01-10 15:13:06

标签: swift macos nstableview

我正在编写一个应用程序来帮助我在解析时更新我的​​数据库,并且我试图将对象加载到nstableview中。

无论出于何种原因,我在我的viewcontroller中调用时返回nil,因此我将数据移动到我的appdelegate中以获取对象。

let storyBoard = NSStoryboard(name: "Main", bundle: nil)
let myVC = storyBoard.instantiateControllerWithIdentifier("teacher") as! ViewController

var teachers = [Teacher]()

let query = PFQuery(className: "TeacherList")
query.findObjectsInBackgroundWithBlock {
    objects, error in
    if let objects = objects {
        for object in objects {
            let teacher = Teacher()
            teacher.name = object["name"] as! String
            teacher.email = object["email"] as! String
            teacher.subjectsTaught = object["subjectsTaught"] as! [String: String]
            teacher.category = object["category"] as! String
            teacher.uniqueID = object.objectId!
            teachers.append(teacher)
        }

    }
    print(teachers)
    myVC.teacherList = teachers
}

如你所见,我将它传递给我的VC。所以我理解我需要重新加载数据,因为在下载数据之前将调用viewDidLoad()。我已经尝试将tableView.reloadData()放在didList的teacherList中,以防万一在viewloads之前设置,我甚至把它放在viewdidload中。

var teacherList: [Teacher]? {
didSet {
    print("got set")
    tableView.reloadData()
  }
}

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.setDelegate(self)
    tableView.setDataSource(self)
    tableView.reloadData()
}

然而,无论如何,我的tableview对于viewdidload之后发生的任何事情都是零。我还在我的getSet中尝试了可选的通道。 我还应该说我是OSX编程的新手,因为我完成了大部分iOS编程。

我可以将查询放在我的VC中,但每当我运行查询时,我都会返回nil。

1 个答案:

答案 0 :(得分:1)

PFQuery异步工作,在viewDidLoad退出后,数据会在计算机速度方面稍后返回。

在主线程上填充数组后,立即重新加载块中的表视图。

var teachers = [Teacher]()

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.setDelegate(self)
    tableView.setDataSource(self)
    let query = PFQuery(className: "TeacherList")
    query.findObjectsInBackgroundWithBlock { [unowned self] (objects, error) in
      if let objects = objects {
        for object in objects {
            let teacher = Teacher()
            teacher.name = object["name"] as! String
            teacher.email = object["email"] as! String
            teacher.subjectsTaught = object["subjectsTaught"] as! [String: String]
            teacher.category = object["category"] as! String
            teacher.uniqueID = object.objectId!
            self.teachers.append(teacher)
        }
      }
    dispatch_async(dispatch_get_main_queue()) {
      self.tableView.reloadData()
    }
    print(self.teachers)
  }
}