表视图未返回数组值的行数

时间:2016-09-23 04:14:53

标签: arrays swift uitableview firebase firebase-realtime-database

我在数组中添加了一堆值,然后在表视图中将值的数量作为多个行返回。这是我将我的值添加到数组的方式:

func getCurrentUserSchoolOrWorkAddressAndDisplayOtherUsers() {
    let currentUser = (FIRAuth.auth()?.currentUser!)
    let userID = currentUser?.uid

    FIRDatabase.database().reference().child("users").child(userID!).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
        let schoolOrWorkAddress = snapshot.value!["schoolOrWorkAddress"] as! String

        FIRDatabase.database().reference().child("schoolOrWorkAddress").child(schoolOrWorkAddress).observeSingleEventOfType(.Value, withBlock: { (snapshot) in
            if(!snapshot.exists()){
                return
            }

            let locations = snapshot.value! as! NSDictionary

            for (index, location) in locations.enumerate() {

                FIRDatabase.database().reference().child("users").child(location.key as! String).observeEventType(.ChildAdded, withBlock: { (snapshot: FIRDataSnapshot) in
                    if(snapshot.exists()){
                        print(snapshot)
                        if let dictionary = snapshot.value  as? [String: AnyObject] {
                            let user = User()
                            user.id = snapshot.key
                            user.setValuesForKeysWithDictionary(dictionary)

                            self.users.append(user)
                            print(self.users)
                        }
                    }
                    }, withCancelBlock: nil)
            }
            dispatch_async(dispatch_get_main_queue(), {
                self.tableView.reloadData()
            })

        })
    })
}

然后我将数组计数作为表视图行的数量返回,如下所示:

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return users.count

}

唯一的问题是由于某种原因它似乎没有返回除0以外的任何计数。我认为问题源于上面的异步代码调度,因为它是在函数中调用的第一个东西。在将所有元素附加到应该是问题的数组之后,它不会被调用。但是,当我将调度异步放在for循环内部而不是外部时,它甚至都不会被读取。我用断点测试了这个。

以下代码是mycellforrowatindexpath代码块:

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

    let cell = tableView.dequeueReusableCellWithIdentifier(cellId, forIndexPath: indexPath) as! UserCell

    let user = users[indexPath.row]

    cell.textLabel?.text = user.fullName
    cell.detailTextLabel?.text = user.email

    if let userPhoto = user.userPhoto {

        cell.profileImageView.loadImageUsingCacheWithUrlString(userPhoto)

    }

    return cell
}

以下是我做过的一些print语句调试,它显示了附加到数组的内容以及users.count值是什么:

enter image description here

基本上,我的问题是如何获取它以便表视图返回我的数组的实际值。我再次认为问题源于调度异步命令。

任何帮助都将不胜感激!

0 个答案:

没有答案