Ios &引用;“索引超出范围”;在刷新表格的同时-斯威夫特
我在视图控制器中有两个按钮,它们下面有一个表视图。当使用不同的过滤器参数按下两个按钮之一时,表格视图将刷新。实际上,当加载表视图,然后单击另一个按钮时,它工作正常,表被刷新。但是,当您在表视图中滚动时,当您按下另一个按钮时,会出现“索引超出范围”错误。我尝试了很多方法来解决这个问题,但就是做不到。有什么想法吗?我使用parse作为自由成员。我的代码的重要部分如下:Ios &引用;“索引超出范围”;在刷新表格的同时-斯威夫特,ios,swift,uitableview,parse-platform,indexoutofboundsexception,Ios,Swift,Uitableview,Parse Platform,Indexoutofboundsexception,我在视图控制器中有两个按钮,它们下面有一个表视图。当使用不同的过滤器参数按下两个按钮之一时,表格视图将刷新。实际上,当加载表视图,然后单击另一个按钮时,它工作正常,表被刷新。但是,当您在表视图中滚动时,当您按下另一个按钮时,会出现“索引超出范围”错误。我尝试了很多方法来解决这个问题,但就是做不到。有什么想法吗?我使用parse作为自由成员。我的代码的重要部分如下: @IBAction func filterType0_clicked(sender: AnyObject) { if
@IBAction func filterType0_clicked(sender: AnyObject) {
if filterTypeVar != 0 {
self.activityIndicator.startAnimating()
self.waitView.hidden = false
filterTypeVar = 0
refreshResults()
}
}
@IBAction func filterType1_clicked(sender: AnyObject) {
if filterTypeVar != 1 {
self.activityIndicator.startAnimating()
self.waitView.hidden = false
filterTypeVar = 1
refreshResults()
}
}
func refreshResults() {
resultsNameArray.removeAll(keepCapacity: false)
resultsUserNameArray.removeAll(keepCapacity: false)
resultsObjectIdArray.removeAll(keepCapacity: false)
var query = PFQuery(className: “posts”)
query.whereKey("userName", containedIn: usersArray)
if filterTypeVar == 0 {
println("no filter")
}
else {
query.whereKey("Type", equalTo: filterTypeVar)
}
query.addDescendingOrder("createdAt")
query.limit = 10
query.findObjectsInBackgroundWithBlock {
(objects:[AnyObject]?, error:NSError?) -> Void in
if error == nil {
for object in objects! {
self.resultsNameArray.append(object.objectForKey("profileName") as! String)
self.resultsUserNameArray.append(object.objectForKey("userName") as! String)
self.resultsObjectIdArray.append(object.objectId as String!)
self.resultsTable.reloadData()
}
if self.resultsNameArray.isEmpty {
self.resultsTable.hidden = true
}
else {
self.resultsTable.hidden = false
}
self.activityIndicator.stopAnimating()
self.waitView.hidden = true
}
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return resultsNameArray.count
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 127
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:mainCell = tableView.dequeueReusableCellWithIdentifier("Cell") as! mainCell
cell.profileLbl.setTitle(self.resultsNameArray[indexPath.row], forState: UIControlState.Normal)
cell.usernameLbl.text = self.resultsUserNameArray[indexPath.row]
cell.objectid.text = self.resultsObjectIdArray[indexPath.row]
return cell
}
在完成数据数组的提取和填充后,尝试重新加载表数据。另外,在获得查询数据后,清除数据数组一次 例如,在
refreshResults
方法中,将self.resultsTable.reloadData()
移动到For
循环的外部:
resultsNameArray.removeAll(keepCapacity: false)
resultsUserNameArray.removeAll(keepCapacity: false)
resultsObjectIdArray.removeAll(keepCapacity: false)
// You could reload again here; this might be superfluous.
self.resultsTable.reloadData()
for object in objects! {
self.resultsNameArray.append(object.objectForKey("profileName") as! String)
self.resultsUserNameArray.append(object.objectForKey("userName") as! String)
self.resultsObjectIdArray.append(object.objectId as String!)
}
// Moved the refresh outside of loop so that you
// aren't reloading the table until you've finished
// loading your data.
self.resultsTable.reloadData()
尽管如此,我猜数组的计数与numberofrowsinsection部分不匹配。错误在“query.limit=10”部分之后开始。最后一个println显示在那里。我刚刚注意到您在获取数据之前清除了数组。由于fetch是异步运行的,因此在获得数据后应该清除数组。从那以后呢?请参阅更新的代码。