为什么我在尝试为我的 UITableView 获取 UILabel 时一直收到 "fatal error"?
Why do I keep receiving a "fatal error" when trying to fetch a UILabel for my UITableView?
我是一名编码初学者,但似乎陷入了僵局。我正在设置 UITableView
来显示用户的博客文章。我可以成功地从我的 Firestore 数据库中检索信息,但实际上无法将此信息填充到我的 UITableViewCell
。我认为这取决于我的 'PostTableViewCell' 的设置方式。对此的任何答案将不胜感激。这是我拥有的:
主页视图控制器:
var postArray: [String] = []
var documents: [DocumentSnapshot] = []
let db = Firestore.firestore()
let currentUserID = Auth.auth().currentUser?.uid
// Find the UserIDs of people following
// Where Field for those UserIDs in "Posts"
override func viewDidLoad() {
super.viewDidLoad()
getFollowingPosts()
configureTableView()
}
func getFollowingPosts() {
let searchForFollowing = db.collection("users").document(currentUserID!).collection("Following")
searchForFollowing.getDocuments { (snapshot, error) in
for documents in snapshot!.documents {
let followedUID = documents.get("uid")
print(followedUID!)
self.db.collection("posts").whereField("uid", isEqualTo: followedUID!).getDocuments { (querySnapshot, error) in
for documents in querySnapshot!.documents {
let uid = documents.get("uid") as! String
let title = documents.get("Title") as! String
let ProfilePictureURL = documents.get("ProfilePictureURL") as! String
let username = documents.get("username") as! String
let content = documents.get("Content") as! String
self.postArray.append(title)
print(self.postArray)
}
self.tableView.reloadData()
}
}
}
}
func configureTableView() {
tableView.delegate = self
tableView.dataSource = self
tableView.register(PostTableViewCell.self, forCellReuseIdentifier: "PostCell")
// remove separators for empty cells
tableView.tableFooterView = UIView()
// remove separators from cells
tableView.separatorStyle = .none
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
postArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell", for: indexPath) as! PostTableViewCell
let post = postArray[indexPath.row]
**cell.titleLabel.text = post** //Error is encountered here
return cell
}
PostTableViewCell:
class PostTableViewCell: UITableViewCell {
@IBOutlet weak var usernameLabel: UILabel!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var contentLabel: UILabel!
}
正如我在标题中所说,每当我尝试构建时,我总是收到“致命错误:在隐式展开可选值时意外发现 nil”,这让我相信我的 'PostTableViewCell' - 这一点在我的代码中用双星号标记。任何信息和答案将不胜感激。我是一个真正的初学者,渴望从这种停滞中取得进步。
- 从您的代码中删除以下语句:
tableView.register(PostTableViewCell.self, forCellReuseIdentifier: "PostCell")
- 您在 PostTableViewCell 中缺少此函数:
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
我是一名编码初学者,但似乎陷入了僵局。我正在设置 UITableView
来显示用户的博客文章。我可以成功地从我的 Firestore 数据库中检索信息,但实际上无法将此信息填充到我的 UITableViewCell
。我认为这取决于我的 'PostTableViewCell' 的设置方式。对此的任何答案将不胜感激。这是我拥有的:
主页视图控制器:
var postArray: [String] = []
var documents: [DocumentSnapshot] = []
let db = Firestore.firestore()
let currentUserID = Auth.auth().currentUser?.uid
// Find the UserIDs of people following
// Where Field for those UserIDs in "Posts"
override func viewDidLoad() {
super.viewDidLoad()
getFollowingPosts()
configureTableView()
}
func getFollowingPosts() {
let searchForFollowing = db.collection("users").document(currentUserID!).collection("Following")
searchForFollowing.getDocuments { (snapshot, error) in
for documents in snapshot!.documents {
let followedUID = documents.get("uid")
print(followedUID!)
self.db.collection("posts").whereField("uid", isEqualTo: followedUID!).getDocuments { (querySnapshot, error) in
for documents in querySnapshot!.documents {
let uid = documents.get("uid") as! String
let title = documents.get("Title") as! String
let ProfilePictureURL = documents.get("ProfilePictureURL") as! String
let username = documents.get("username") as! String
let content = documents.get("Content") as! String
self.postArray.append(title)
print(self.postArray)
}
self.tableView.reloadData()
}
}
}
}
func configureTableView() {
tableView.delegate = self
tableView.dataSource = self
tableView.register(PostTableViewCell.self, forCellReuseIdentifier: "PostCell")
// remove separators for empty cells
tableView.tableFooterView = UIView()
// remove separators from cells
tableView.separatorStyle = .none
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
postArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "PostCell", for: indexPath) as! PostTableViewCell
let post = postArray[indexPath.row]
**cell.titleLabel.text = post** //Error is encountered here
return cell
}
PostTableViewCell:
class PostTableViewCell: UITableViewCell {
@IBOutlet weak var usernameLabel: UILabel!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var contentLabel: UILabel!
}
正如我在标题中所说,每当我尝试构建时,我总是收到“致命错误:在隐式展开可选值时意外发现 nil”,这让我相信我的 'PostTableViewCell' - 这一点在我的代码中用双星号标记。任何信息和答案将不胜感激。我是一个真正的初学者,渴望从这种停滞中取得进步。
- 从您的代码中删除以下语句:
tableView.register(PostTableViewCell.self, forCellReuseIdentifier: "PostCell")
- 您在 PostTableViewCell 中缺少此函数:
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}