2016-10-08 8 views
0

を移入することができません。私は、コードのいくつかのストリップを行方不明になったかどうかを確認しようとしたが、多分私はエラーのUITableViewスウィフトに

他のすべてが接続され、正しく設定されて表示されません。しかし、私はなぜ私はUITableViewを埋めることができないのかわかりません

しかし、私はなぜそれがデータを渡していないのか分かりません。アイデア?

func getLocalComments(point:PFGeoPoint){ 
    var temp = [CommentDetails]() 
    DispatchQueue.global(qos: .background).async { 
     let qComments = PFQuery(className: "UserCommentary") 
     let qDrinks = PFQuery(className: "venueDrinks") 
     if self.type == "House Parties"{ 
      //Query the bars 
      qDrinks.whereKey("venueName", equalTo: self.id) 
      qDrinks.whereKey("venueID", equalTo: self.venueName) 
      qDrinks.addDescendingOrder("createdAt") 

      qComments.whereKey("venueID", equalTo: self.id) 
      qComments.whereKey("venueName", equalTo: self.venueName) 

      do{ 
       var comment:CommentDetails = CommentDetails.init(comm: "Test", ven: self.venueName, venId: self.id, owner: PFUser.current()!.username!, vote: 0) 
       let qReply1 = try qDrinks.findObjects() 
       if qReply1.count>0{ 
        var i = 0 
        while i < 2 { 
         let item = qReply1[i] 
         print(item) 
         comment.cellType = 2 
         i+=1 
        } 
        //temp.append(comment) 
       } 
       comment = CommentDetails.init(comm: "Test", ven: self.venueName, venId: self.id, owner: PFUser.current()!.username!, vote: 0) 
       let qReply2 = try qComments.findObjects() 
       for item in qReply2{ 
        comment.commentOwner = item.object(forKey: "owner") as! String 
        comment.comment = item.object(forKey: "comment") as! String 
        comment.isFile = item.object(forKey: "image") as! Bool 
        if comment.isFile { 
         let dataPhoto:PFFile = item.object(forKey: "imgFile") as! PFFile 
         let imageData:NSData = try dataPhoto.getData() 
         let image:UIImage = UIImage(data:imageData as Data)! 
         comment.imageFile = image 
         comment.cellType = 2 
        } 
        temp.append(comment) 

       } 
       print("Comment",temp) 

      } 
      catch{ 
       print(error) 
      } 
     } 
    } 
    DispatchQueue.main.async { 
     print(temp) 
     self.commentList.removeAll() 
     self.commentList = temp 
     print("Comment",self.commentList) 
     self.commentTableView.reloadData() 

    } 

} 

答えて

2

バックグラウンドスレッドの最後のメインスレッドに戻る必要があります。 DispatchQueue.main.asyncメソッドを呼び出すタイミングを確認します。

func getLocalComments(point:PFGeoPoint){ 
     var temp = [CommentDetails]() 
     DispatchQueue.global(qos: .background).async { 
      let qComments = PFQuery(className: "UserCommentary") 
      let qDrinks = PFQuery(className: "venueDrinks") 
      if self.type == "House Parties"{ 
       //Query the bars 
       qDrinks.whereKey("venueName", equalTo: self.id) 
       qDrinks.whereKey("venueID", equalTo: self.venueName) 
       qDrinks.addDescendingOrder("createdAt") 

       qComments.whereKey("venueID", equalTo: self.id) 
       qComments.whereKey("venueName", equalTo: self.venueName) 

       do{ 
        var comment:CommentDetails = CommentDetails.init(comm: "Test", ven: self.venueName, venId: self.id, owner: PFUser.current()!.username!, vote: 0) 
        let qReply1 = try qDrinks.findObjects() 
        if qReply1.count>0{ 
         var i = 0 
         while i < 2 { 
          let item = qReply1[i] 
          print(item) 
          comment.cellType = 2 
          i+=1 
         } 
         //temp.append(comment) 
        } 
        comment = CommentDetails.init(comm: "Test", ven: self.venueName, venId: self.id, owner: PFUser.current()!.username!, vote: 0) 
        let qReply2 = try qComments.findObjects() 
        for item in qReply2{ 
         comment.commentOwner = item.object(forKey: "owner") as! String 
         comment.comment = item.object(forKey: "comment") as! String 
         comment.isFile = item.object(forKey: "image") as! Bool 
         if comment.isFile { 
          let dataPhoto:PFFile = item.object(forKey: "imgFile") as! PFFile 
          let imageData:NSData = try dataPhoto.getData() 
          let image:UIImage = UIImage(data:imageData as Data)! 
          comment.imageFile = image 
          comment.cellType = 2 
         } 
         temp.append(comment) 

        } 
        print("Comment",temp) 
        DispatchQueue.main.async { 
         print(temp) 
         self.commentList.removeAll() 
         self.commentList = temp 
         print("Comment",self.commentList) 
         self.commentTableView.reloadData() 

        } 
       } 
       catch{ 
        print(error) 
       } 
      } 
     } 
    } 

非同期バックグラウンドスレッドを作成すると、メインスレッドの横に実行されることがわかります。したがって、バックグラウンドスレッドとメインスレッドの中にブレークポイントを設定すると、メインスレッドが最初に開始されることに気づくでしょう。

DispatchQueue.main.asyncは、バックグラウンドスレッドがtemp配列にデータを入力する前に実行されます。ブロックをDispatchQueue.global(qos:.background).asyncブロックの内部に移動すると、ブロックは必要に応じてメインスレッドで実行されます。

短い文では、上から下に実行されません!

+0

ああ、私はちょうどそれを置き忘れた...マイナーディテール!おかげで –

+0

まず第一にそれは動作しますか? :)そうでなければ、他にも行うべき点があります。 –

+0

今それをテストします。私はあなたにupvoteを一度与えます。 –

関連する問題