2016-07-15 9 views
0

テーブルビューにfirebaseデータベースを設定しようとしています。ここでテーブルビューにfirebaseデータベースを設定する

コードです: -

import UIKit 
import Firebase 

class FriendsListViewController: UIViewController , UITableViewDataSource, UITableViewDelegate{ 

@IBOutlet weak var friendsListTableView: UITableView! 

let ref = FIRDatabase.database().reference() 
var FIRControllerClassHandle : FIRControllerClass = FIRControllerClass() 
var imageCell = [UIImage]() 
var username = [String]() 
var userDesc = [String]() 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    friendsListTableView.alpha = 0 
    friendsListTableView.delegate = self 
    friendsListTableView.dataSource = self 

    populateTable({ 
     self.friendsListTableView.reloadData() 
    })  
} 

func populateTable(completionBlock : (() -> Void)){ 

    FIRControllerClassHandle.retrieveFriendListDatabase { (userIdA) in 

     for a in 1 ... userIdA.count-1 { 
      repeat { 

       self.FIRControllerClassHandle.retrieveStorageForFriendListCell(userIdA[a] as! String, completion: { (image) in 
        print("image transferred in the friendlist block : \(image)") 
        print("user id in friendList : \(userIdA[a])") 

        self.imageCell.append(image) 
       }) 

       self.FIRControllerClassHandle.retrieveDatabaseForFriendListCell(userIdA[a] as! String, completion: { (profile) in 


        self.username.append((profile["username"] as? String)!) 
        self.userDesc.append((profile["briefDecription"] as? String)!) 
        completionBlock() 
       }) 
      } while(a <= userIdA.count-1) 
     } 
     } 
    } 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    print("username count in the no of rows : \(username.count)") 

    return username.count ?? 0 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    print("username in cellForIndexpath : \(self.username)") 

    let cell = friendsListTableView.dequeueReusableCellWithIdentifier("friendListCell") as! FriendsListTableViewCell 

    cell.friendListProfileName.text = username[indexPath.row] 
    cell.friendListProfileDescription.text = userDesc[indexPath.row] 
    cell.friendListProfilePicture.image = imageCell[indexPath.row] 

    return cell 
} 

@IBAction func backBtnAction(sender: UIButton) { 

    let homePageScene = self.navigationController?.storyboard?.instantiateViewControllerWithIdentifier("HomePageFeedViewControllerVC_ID") as! HomePageFeedViewController 
    self.navigationController?.pushViewController(homePageScene, animated: true) 

} 


} 

これは無限ループを実行している、 userIdAは私が私のuser.uid self.FIRControllerClassHandle.retrieveStorageForFriendListCellのすべてを格納した配列を返す別のFIRControllerクラス内の関数でありますユーザーのプロフィール画像 同様にFIRControllerClassHandle.retrieveDatabaseForFriendListCellデータベースを検索する どうすればこの問題を回避できますか?

+0

なぜ「a in ... 1」で「0」でないのですか? – Droppy

+0

私はバックエンドで配列を初期化しなければならなかったので、それ自体を初期化する値が必要です... 0インデックスでは、実際のuserIdA配列は1から始まります。 – Dravidian

+0

配列の使用を避けてください - あなたは困っている。プロセス全体が大幅に簡素化されるかもしれませんが、あなたのFirebase構造を見ることなく、伝えるのは難しいでしょう。あなたは、テキストとして(画像なし)それのスニペットを投稿できますか、私たちは見ていきます。 – Jay

答えて

0

あなたはお互いに内にネスト二つのループがあります。内側のループでは

for a in 1 ... userIdA.count-1 { 
     repeat{ 
      // ... 
     }while(a <= userIdA.count-1) 
    } 

、永遠にaが変化しないので、それがループますが。私はあなたがただ他のループをしたいと思う。

関連する問題