如何解决TableView在Xcode中不显示Firebase数据Swift
我正在使用Xcode 11尝试在Firebase中以表视图显示“发布”数据,并且我已经测试了使用打印功能调用信息的方法。
这是我用于表视图控制器的代码:
@Transactional
这是postCell的代码:
import UIKit
import Firebase
import FirebaseDatabase
import SwiftKeychainWrapper
import FirebaseAuth
class FeedVC: UITableViewController {
var currentUserImageUrl: String!
var posts = [Post]()
var selectedPost: Post!
override func viewDidLoad() {
super.viewDidLoad()
getUsersData()
getPosts()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func getUsersData(){
guard let userID = Auth.auth().currentUser?.uid else { return }
Database.database().reference().child("users").child(userID).observeSingleEvent(of: .value) { (snapshot) in
if let postDict = snapshot.value as? [String : AnyObject] {
self.tableView.reloadData()
}
}
}
func getPosts() {
Database.database().reference().child("textPosts").observeSingleEvent(of: .value) { (snapshot) in
guard let snapshot = snapshot.children.allObjects as? [DataSnapshot] else { return }
self.posts.removeAll()
for data in snapshot.reversed() {
guard let postDict = data.value as? Dictionary<String,AnyObject> else { return }
let post = Post(postKey: data.key,postData: postDict)
print(DataSnapshot.self)
self.posts.append(post)
}
self.tableView.reloadData()
}
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return posts.count
}
override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "postCell") as? PostCell else { return UITableViewCell() }
cell.configCell(post: posts[indexPath.row])
return cell
}
}
这是关于邮政的:
import UIKit
import Firebase
import FirebaseStorage
import FirebaseDatabase
import SwiftKeychainWrapper
class PostCell: UITableViewCell {
@IBOutlet weak var userImg: UIImageView!
@IBOutlet weak var username: UILabel!
@IBOutlet weak var postText: UILabel!
@IBOutlet weak var commentBtn: UIButton!
var post: Post!
let currentUser = KeychainWrapper.standard.string(forKey: "uid")
func configCell(post: Post) {
self.post = post
self.username.text = post.username
self.postText.text = post.postText
print(self.post)
print(self.post.username)
let ref = Storage.storage().reference(forURL: post.userImg)
ref.getData(maxSize: 100000000,completion: { (data,error) in
if error != nil {
print("couldnt load img")
} else {
if let imgData = data {
if let img = UIImage(data: imgData){
self.userImg.image = img
}
}
}
})
}}
我已经坚持了一段时间,任何帮助将不胜感激!
解决方法
这是更新的代码,但仍不显示任何内容:
import Firebase
import FirebaseDatabase
import SwiftKeychainWrapper
import FirebaseAuth
class FeedVC: UITableViewController {
var currentUserImageUrl: String!
var posts = [Post]()
var selectedPost: Post!
override func viewDidLoad() {
super.viewDidLoad()
getUsersData()
getPosts()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func getUsersData(){
guard let userID = Auth.auth().currentUser?.uid else { return }
Database.database().reference().child("users").child(userID).observeSingleEvent(of: .value) { (snapshot) in
if let postDict = snapshot.value as? [String : AnyObject] {
self.tableView.reloadData()
}
}
}
func getPosts() {
Database.database().reference().child("textPosts").observe(.value) { (snapshot) in
guard let snapshot = snapshot.children.allObjects as? [DataSnapshot] else { return }
self.posts.removeAll()
for data in snapshot.reversed() {
guard let postDict = data.value as? Dictionary<String,AnyObject> else { return }
let post = Post(postKey: data.key,postData: postDict)
print(DataSnapshot.self)
self.posts.append(post)
}
DispatchQueue.main.async{
self.tableView.reloadData()
}
}
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
return posts.count
}
override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell") as? PostCell else { return UITableViewCell() }
cell.configCell(post: posts[indexPath.row])
return cell
}
}`
,
您是否检查了数据源方法是否被调用? 另外,请确认您的单元格是否有高度。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。