2016-04-11 5 views
0

バックエンドテーブルからデータをロードしようとしていますが、テーブルを正しくロードできません。空白のままです。複数の場所で試してみましたが、クラッシュが発生します。唯一の場所は、最後のエラーコール後です。しかし、テーブルは空白のままです。関連するコードは、私のfetchingUserDataAsync()関数にあります。ここでテーブルビューリロードバックエンドレスから正しく更新されない

が私のテーブルビューコントローラです:

import UIKit 

class UserTableViewController: UITableViewController { 

var backendless = Backendless.sharedInstance() 

let follow:Follow = Follow() 



var usernames = [""] 
var userids = [""] 
var userEmails = [""] 

var isFollowing = [false] 


func fetchingUserDataAsync() { 

    self.userids.removeAll(keepCapacity: true) 
    self.usernames.removeAll(keepCapacity: true) 
    self.isFollowing.removeAll(keepCapacity: true) 

    print("\n============ Fetching user data using the ASYNC API ============") 





    let query = BackendlessDataQuery() 
    backendless.persistenceService.of(BackendlessUser.ofClass()).find(
     query, 
     response: { (name : BackendlessCollection!) ->() in 
      let currentPage = name.getCurrentPage() 

      for names in currentPage as! [BackendlessUser] { 
       //print("User name = \(names.name)") 

       if(names.name != self.backendless.userService.currentUser.name){ 

       self.usernames.append(names.name) 

        self.backendless.persistenceService.of(BackendlessUser.ofClass()).find(
         query, 
         response: { (objectId : BackendlessCollection!) ->() in 
          let currentPage = objectId.getCurrentPage() 

          for objects in currentPage as! [BackendlessUser] { 
           //print("User id = \(objects.objectId)") 

           if(objects.objectId != self.backendless.userService.currentUser.objectId){ 

            self.userids.append(objects.objectId) 

            let currentUser = self.backendless.userService.currentUser 
            let user = objects.objectId 

            let whereClauseOne = "follower = '\(currentUser.objectId)' " 

            let whereClauseTwo = "following= '\(user)'" 

            //print ("I am following'\(whereClauseTwo)'") 

            self.backendless.persistenceService.of(objects.ofClass()).find(
             query, 
             response: { objects ->() in 


              if let objects = objects{ 


               self.isFollowing.append(true) 

              } else{ 

               self.isFollowing.append(false) 

              } 



             }, 
             error: { (fault : Fault!) ->() in 
              print("Server reported an error: \(fault)") 
             } 
            ) 


           } 


          } 


         }, 
         error: { (fault : Fault!) ->() in 
          print("Server reported an error: \(fault)") 
         } 
        ) 


       } 


      } 



     }, 
     error: { (fault : Fault!) ->() in 
      print("Server reported an error: \(fault)") 
     } 
    ) 

    ////////////////////////////////////////////////////////////////////////////////// 
    self.tableView.reloadData() 


} 





override func viewDidLoad() { 
    super.viewDidLoad() 




    fetchingUserDataAsync() 



} 
+0

お願いしている問題に関連するコードだけを投稿することをお勧めします(すべての 'didSelectRowAtIndexPath'コードを削除することができます)。また、コードをうまく整形するのにも役立ちます。 – paulvs

答えて

1

あなたのデータ配列はオブジェクトで満たされた後、リロードデータを呼び出す必要があり、応答閉鎖があるので、あなたは外応答クロージャ内でそれを入れていないする必要がありますしばらくしてAsyncと呼ばれ、リロードデータがすぐにビューで呼び出されたときにロードされました。 もちろん、内部に置くと、リロードデータをメインキューにディスパッチする必要があります。

+0

私はclosureでdispatch_main()を試してみましたが、dispatch_get_main_queueを試しましたが、インデックスエラーを与え続けています。 –

+0

がついにそれを一貫して動作させました。私はifステートメントを置いて、すべての配列でカウントが同じであることを確認してからリフレッシュする必要がありました。 –