2016-08-30 2 views
1

Я пытаюсь получить табличное представление для отображения проанализированных данных, но массив, который должен заполнять мой табличный вид, не добавляется. Может ли кто-нибудь быстро взглянуть и сообщить мне, что я делаю неправильно?Swift Array не добавляется к

import UIKit 
import SwiftKeychainWrapper 
import Firebase 

class FeedVC: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet var tableView: UITableView! 

var posts = [Post]() 

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    tableView.delegate = self 
    tableView.dataSource = self 


    DataService.ds.REF_POSTS.observeEventType(.Value, withBlock: { snapshot in 
     if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] 
     { 
      for snap in snapshot 
      { 

       if let postDict = snap.value as? Dictionary<String, AnyObject> 
       { 
        let key = snap.key 
        let post = Post(postID: key, postData: postDict) 
        self.posts.append(post) 

       } 
      } 
     } 
    }) 

    tableView.reloadData() 


} 

override func viewDidAppear(animated: Bool) { 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return posts.count 
} 
func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

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

    let post = posts[indexPath.row] 
    print("\(post.caption)") 


    return tableView.dequeueReusableCellWithIdentifier("PostCell") as! PostCell 
} 






@IBAction func signOutBtnTapped(sender: UIButton) { 

    KeychainWrapper.defaultKeychainWrapper().removeObjectForKey(KEY_UID) 
    try! FIRAuth.auth()?.signOut() 
    performSegueWithIdentifier("toSignInVC", sender: nil) 
} 


} 

Спасибо, ребята.

+1

Вы уверены, что ваш массив не заселен? Попробуйте распечатать его в своем закрытии. И если он печатает заполненное значение, добавьте также свою reloadData в закрытие, чтобы убедиться, что ваша перезагрузка tableView ПОСЛЕ закрытия заканчивается. – Akaino

+0

DO 'tableView.reloadData()' after for loop завершает –

+0

... но внутри обработчика завершения 'observEventType'. – Rob

ответ

2

Ваш поиск данных представляет собой операцию async, которая, вероятно, не заканчивается до отображения таблицы. Попробуйте перезагрузить данные таблицы в новой строке после self.posts.append(post) или в конце блока завершения.

+1

Не лучше ли перезагружать после завершения всего цикла? – Akaino

+0

@Akaino Скорее всего, да. Обновлено, спасибо. – MirekE

+1

Большое вам спасибо. Я проснулся перед сном, пытаясь понять это! – SwiftStarter

Смежные вопросы