我正在编写一个应用程序来帮助我在解析时更新我的数据库,并且我试图将对象加载到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。
答案 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)
}
}