2015-06-02 56 views
-1

我有一些問題需要在我的TableViewController中顯示'作者的每個帖子的用戶名。Swift和Parse - 消息應用程序無法在Xcode 6.3中顯示用戶名

它實際上顯示當前用戶的所有顯示帖子的用戶名,如何顯示每個發帖人的用戶名?

我正在使用Xcode 6.3和Parse.com API。 timeLabel顯示正確,但userLabel顯示當前登錄的用戶而不是帖子的作者。

如果我註銷並使用其他用戶名登錄,則所有userLabel都將更改爲新用戶。調試控制檯顯示Optional("theNameOfTheCurrentUser")的次數與顯示帖子的次數相同。

解析主機2 DB一個用戶(用戶)和一個帖子(Poemes),在Poemes表中有一個指針指向特定用戶。

我升級到6.3的Xcode最近和var findLover:PFQuery = PFUser.query()

值可選類型有一個錯誤「PFQuery?沒有解開

我在這行的末尾添加了感嘆號(!),它刪除了錯誤,這是否導致了這個問題?

我讀解析文檔,並遵循一些例子,但看起來我有點失落在這裏,任何幫助和建議將高度讚賞,謝謝。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell:DisplayTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! DisplayTableViewCell 

    let poeme:PFObject = self.timelineData.objectAtIndex(indexPath.row) as! PFObject 
    cell.poemeLabel.text = poeme.objectForKey("content") as? String 

    var dateFormatter:NSDateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "MM-dd HH:mm" 
    cell.timeLabel.text = dateFormatter.stringFromDate(poeme.createdAt!) 

    var findUser:PFQuery = PFUser.query()! 
    findUser.findObjectsInBackgroundWithBlock { 
     (objects, error)->Void in 

     if var objects = objects { 

      let author:PFUser = (objects as NSArray).lastObject as! PFUser 
      cell.userLabel.text = author.username 

      println(author.username) 

     }) 
    } 

    return cell 
} 

回答

0

功能findUser.findObjectsInBackgroundWithBlock發生在後臺,而主線程仍然在運行,所以你的時間得到解析你需要時,你試圖在函數返回電池早已逝去的值響應。

解決這個問題最簡單的方法就是先取得你需要的所有數據並將其安全地保存在一個數組中,然後使用這個數組填充單元格。

+0

感謝IcaroNZ您的及時答覆!如果還沒有收到結果,顯示的標籤是不是一直空白或空白? println返回:可選(「TheNameOfTheCurrentUser」)與分析數據庫中的帖子數量一樣多。 – mrdaco

+0

不一定,您正在使用'dequeueReusableCellWithIdentifier',以便在某個階段填充值,並且當您重新使用單元格時,舊值仍然存在,因爲您沒有設置任何新值,在某個階段填充的舊值已重用 – Icaro

+0

好吧,感謝您的跟進,那麼如果我理解正確,我需要讓'let author:PFUser =(objects as NSArray).lastObject as! PFUser'出於'findLover.findObjectsInBackgroundWithBlock'關閉,對嗎? – mrdaco

0

終於得到它的Xcode 6.3.2修改工作,這裏是結果: 解包和可選的接縫是我的主要問題:

override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell { 
let cell:DisplayTableViewCell = tableView!.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath!) as! DisplayTableViewCell 


    let poeme:PFObject = self.timelineData.objectAtIndex(indexPath!.row) as! PFObject 
    cell.poemeLabel.text = poeme.objectForKey("content") as! String 

    var dateFormatter:NSDateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "MM-dd HH:mm" 
    cell.timeLabel.text = dateFormatter.stringFromDate(poeme.createdAt!) 

    var findUser:PFQuery = PFUser.query()! 
    findUser.whereKey("objectId", equalTo: poeme.objectForKey("user")!.objectId!!) 

    findLover.findObjectsInBackgroundWithBlock { 
     (objects, error)->Void in 

     if var objects = objects { 

      let author:PFUser = (objects as NSArray).lastObject as! PFUser 
      cell.userLabel.text = author.username 

      println(author.username) 

      }) 
     } 
    } 

    return cell 
} 
相關問題