我在数组中添加了一堆值,然后在表视图中将值的数量作为多个行返回。这是我将我的值添加到数组的方式:
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值是什么:
基本上,我的问题是如何获取它以便表视图返回我的数组的实际值。我再次认为问题源于调度异步命令。
任何帮助都将不胜感激!