Xcode Swift 2&x2B;解析:数组索引超出范围
我有一个Xcode Swift 2&x2B;解析:数组索引超出范围,xcode,swift,parse-platform,Xcode,Swift,Parse Platform,我有一个UITableViewController,它基本上是一个新闻提要。我还实现了拉刷新功能。然而,有时当我拉刷新它给我的错误 “数组索引超出范围” 我知道这意味着它试图获取的项目不存在,但你能告诉我为什么吗?这是我的密码: override func viewDidLoad() { super.viewDidLoad() refresher = UIRefreshControl() refresher.attributedTitle = NSAttributedS
UITableViewController
,它基本上是一个新闻提要。我还实现了拉刷新功能。然而,有时当我拉刷新它给我的错误
“数组索引超出范围”
我知道这意味着它试图获取的项目不存在,但你能告诉我为什么吗?这是我的密码:
override func viewDidLoad() {
super.viewDidLoad()
refresher = UIRefreshControl()
refresher.attributedTitle = NSAttributedString(string: "Pull to refresh")
refresher.addTarget(self, action: "refresh", forControlEvents: UIControlEvents.ValueChanged)
self.tableView.addSubview(refresher)
refresh()
tableView.delegate = self
tableView.dataSource = self
}
以及refresh()函数:
func refresh() {
//get username and match with userId
let getUser = PFUser.query()
getUser?.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
if let users = objects {
//clean arrays and dictionaries so we don't get indexing error
self.messages.removeAll(keepCapacity: true)
self.usernames.removeAll(keepCapacity: true)
for object in users {
if let user = object as? PFUser {
//make userId = username
self.users[user.objectId!] = user.username!
}
}
}
})
let getPost = PFQuery(className: "Posts")
getPost.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if let objects = objects {
self.messages.removeAll(keepCapacity: true)
self.users.removeAll(keepCapacity: true)
self.usernames.removeAll(keepCapacity: true)
for object in objects {
self.messages.append(object["message"] as! String)
self.usernames.append(self.users[object["userId"] as! String]!)
self.tableView.reloadData()
}
}
}
self.refresher.endRefreshing()
}
似乎您正在从
用户
中删除所有内容,然后尝试在getPost.findobjectsinbackgroundithblock
中访问它
具体来说,self.users.removeAll(keepCapacity:true)
在self.usernames.append(self.users[object[“userId”]as!String]!)之前调用
另外,请注意这两个查询是异步执行的。当到达第二个查询的完成块时,您不能保证已填充用户
。您很可能希望将两个查询重新构造为或嵌套它们(不推荐)
最后,从外观上看,您可能希望使用removeAll(keepCapacity:false)
而不是使用removeAll(keepCapacity:true)
来保持容量。您好,很抱歉,我在询问此问题之前删除了该行,但没有更新我的代码。我现在将编辑我的问题。它已从错误的部分删除。错误发生在getPost
部分