2015-06-06 74 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()中,這大大提高了速度。感謝您的幫助球員:-)