0
我正在制作一个应用程序,从解析数据库中填充表视图。问题是每当我滚动时都会有一点滞后。通过一些搜索,我意识到问题在于cellForRowAtIndexPath()函数,我正在查询数据库以获取该单元标签所需的数据。我必须在那里查询数据库,因为我使用单元格的位置来索引我的消息数组,以获取正确的消息。这是我的cellForRowAtIndexPath()函数的肉:前沿UITableView上滚动 - iOS
if (path.row < messagesArray.count) {
var message = messagesArray[path.row]
var dateFormat = NSDateFormatter()
var query = PFQuery(className: "Messages")
query.whereKey("messageID", equalTo: message.messageID)
var first = query.getFirstObject()
if (message.senderID == loggedInUserID) {
cell.nameLabel?.text = "I said"
} else {
queryO?.whereKey("objectId", equalTo: message.senderID)
var second = queryO?.getFirstObject()
var name = second!.objectForKey("FIRST") as! String
var middle = second!.objectForKey("MIDDLE") as! String?
var last = second!.objectForKey("LAST") as! String
if (middle != nil) {
cell.nameLabel?.text = name + " " + middle! + " " + last
} else {
cell.nameLabel?.text = name + " " + last
}
}
cell.messageLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
cell.messageLabel?.text = message.messageText
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy 'at' h:mm a" // superset of OP's format
let str = dateFormatter.stringFromDate(first!.objectForKey("TIME") as! NSDate)
cell.senderLabel?.text = str
}
任何想法?
对Parse进行查询的原因是什么?你已经有消息列表。甚至查询本地数据库也是个不错的主意,但网络真的是一个阻碍。尝试使用网络调节器将您的应用放在移动网络上。 –
你应该从Parse预取所有的消息数据 - 或者至少是一个合理的子集,当你需要向下滚动时获取更多的数据 – Paulw11
我同意std.denis,并且我注意到甚至还有第二个解析查询(? ),query0。这些查询是同步的,需要很长时间。你应该在这个方法之外执行这些查询,并且执行异步操作。您应该在本地存储结果并使用cellForRowAtIndexPath中的本地存储 –