这是我的viewDidLoad方法 -
var query = PFUser.query()
query.findObjectsInBackgroundWithBlock({ ( objects : [AnyObject]! , error: NSError! ) -> Void in
//self.users.removeAll(keepCapacity: true)
for object in objects {
var user:PFUser = object as PFUser
println(user.username)
self.users.append(user.username)
}
self.tableView.reloadData()
})
println( " Count \(users.count) ")
在用户的用户名之前打印用户数,这使我相信从数据库中获取用户需要时间。因此我的tableView永远不会更新,代码看起来像这样 -
var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell
cell.textLabel?.text = users[indexPath.row]
return cell
给我一个'数组索引超出范围错误',因为当我的字典为空时,我的表中的行数为3。
在swift上找不到任何特定的解决方案。有什么建议吗?
编辑:忘记提及用户确实打印了很长时间(甚至在用户名之后打印的用户数量之后)
仅供参考,计数始终打印为1。
输出是这样的 - 数1 genaks genaks1427 genaks14271 ADU AFD
答案 0 :(得分:2)
我将viewDidLoad函数中的代码移动到viewDidAppear函数,它的工作方式与我希望它的工作方式相同:)
答案 1 :(得分:1)
如果可以,请在findObjectsInBackgroundWithBlock
方法中执行cellForRowAtIndexPath
查询。查看本教程:https://www.youtube.com/watch?v=Q6qcrO8uNzU他在视频中也这样做。
答案 2 :(得分:0)
当你说“我的表中的行数为3”时,你推断出numberOfRowsInSection
你返回了3.
如果我是对的,我相信这就是问题。
你必须这样做
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return users.count
}
这样,numberOfRowsInSection永远不会与预期的数量不同。