2015-06-06 48 views
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 
    } 

任何想法?

+0

对Parse进行查询的原因是什么?你已经有消息列表。甚至查询本地数据库也是个不错的主意,但网络真的是一个阻碍。尝试使用网络调节器将您的应用放在移动网络上。 –

+0

你应该从Parse预取所有的消息数据 - 或者至少是一个合理的子集,当你需要向下滚动时获取更多的数据 – Paulw11

+0

我同意std.denis,并且我注意到甚至还有第二个解析查询(? ),query0。这些查询是同步的,需要很长时间。你应该在这个方法之外执行这些查询,并且执行异步操作。您应该在本地存储结果并使用cellForRowAtIndexPath中的本地存储 –

回答

0

我最终做的是我把查询放在我的函数外面,然后运行在我的viewDidLoad()中,这大大提高了速度。感谢您的帮助球员:-)