【发布时间】:2015-05-15 07:01:00
【问题描述】:
我正试图弄清楚一旦来自数据库的消息加载到 UITableView 的底部,如何滚动到它的底部。我尝试过使用tableView.setContentOffset(CGPointMake(0, CGFloat.max), animated: true),但我的表格从包含所有消息变为完全没有。我也试过了
var iPath = NSIndexPath(forRow: messagesArray.count - 1, inSection: 0)
tableView.scrollToRowAtIndexPath(iPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: true)
但我得到了EXC_BAD_ACCESS code = 1。任何帮助将不胜感激。
编辑:
在 Parse 从 query.findObjectsInBackgroundWithBlock(...) 中找到数据后,我立即将此代码放入我的 viewDidAppear() 函数中,不确定这是否会有所不同。
查询代码如下:
query.findObjectsInBackgroundWithBlock { (object, error) -> Void in
if (error == nil) {
for var i = 0; i < object!.count; i++ {
var messageObject = Messages()
messageObject.messageID = object![i]["messageID"] as! String
println("MESSAGE ID")
println(messageObject.messageID)
messageObject.messageText = object![i]["message"] as! NSString as String
println("MESSAGE TEXT")
println(messageObject.messageText)
messageObject.recipientID.append(object![i]["recipientID"] as! NSString as String)
println("RECIPIENT")
println(messageObject.recipientID[0])
messageObject.senderID = object![i]["senderID"] as! NSString as String
messageObject.timeStamp = object![i]["timeStamp"] as! NSString as String
println("TIMESTAMP")
println(messageObject.timeStamp)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.messagesArray.append(messageObject)
})
}
self.loadObjects()
self.tableView.reloadData()
self.tableView.setContentOffset(CGPointMake(0, CGFloat.max), animated: true)
}
}
【问题讨论】:
-
首先检查表是否在 indexpath 的条件下加载。可能是 indexpath 不存在
-
你从哪里得到
EXC_BAD_ACCESS code = 1你能更新日志吗? -
@VivekMolkar 我在
tableView.scrollToRowAtIndexPath(...)线上得到它 -
在第二行放一个断点并打印出
iPath和tableView是什么——这可能会给你一些线索。 -
所有与 UI 相关的任务都应该在主线程上执行。因此,您所做的是在更新数据源之前设置表视图。我们从错误中吸取教训:-)
标签: ios uitableview swift parse-platform