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
部分