表视图行数功能不返回数组项是否正确计数?

时间:2016-09-22 04:38:28

标签: ios arrays swift uitableview

我在这样的数组中添加了一堆数据:

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(user)

                dispatch_async(dispatch_get_main_queue(), {
                    self.tableView.reloadData()
                })

            }
        }
    }, withCancelBlock: nil)
}

所有这些数据都被添加到名为users的数组中。然后我像这样返回users.count

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

由于某些随机原因,只要我的数据附加到用户数组,就会停止调用行数。

这张照片是一些打印输出的东西。它显示了数组中项目的计数以及当附加用户的所有数据时它如何停止:

image

有谁知道为什么会这样? 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

在for循环FMDatabase块中,如果使用类似

的代码
for (index, location) in locations.enumerate(){
 // add element to user array  in anotherBlock 
} 

然后

[tableview reloadData]

然后你可以在Users Array中得到0或nil。因为在In循环中,您尝试使用完成来获取对象,如果在另一个线程中使用Database Block,则当前线程执行下一个代码而不是等待完成。

这就是为什么你得到nil,在用户数组中计数0。