gpt4 book ai didi

ios - tableViewCell 按钮上的线程 1 fatal error

转载 作者:行者123 更新时间:2023-11-29 05:54:50 25 4
gpt4 key购买 nike

我想向 tableviewcell 的所有单元格添加关注/关注按钮(链接到当前用户关注的用户 - 类似于 Instagram 关注者列表)。

代码运行,但是当我单击关注者按钮将我带到 TableView 时,我不断收到错误“线程 1: fatal error :在展开可选值时意外发现 nil” - 如果有任何帮助,我将不胜感激知道我做错了什么。

TableView 单元格中的代码:

@IBOutlet weak var followersFollowButton: UIButton!

var user: UserModel? {
didSet {
updateView()
}
}
func updateView() {
if user!.isFollowing! {
configureUnFollowButton()
} else {
configureFollowButton()
}
}

View Controller 中的代码:

 @IBOutlet weak var tableView: UITableView!

var users: [UserModel] = []

func loadusers() {

let ref = Database.database().reference()
guard let currentUser = Auth.auth().currentUser?.uid else { return }

let followersRef = ref.child("followers").child(currentUser) //retreives all nodes in the following node
followersRef.observe(DataEventType.value, with: { snapshot in
print(snapshot.children.allObjects)
for child in snapshot.children { //build the array of keys
let snap = child as! DataSnapshot
let key = snap.key

let userRef = ref.child("users").child(key) //get the user name and profile image from the users node
userRef.observeSingleEvent(of: .value, with: { snapshot in
let user = UserModel()
user.fullname = snapshot.childSnapshot(forPath: "fullname").value as? String
user.profileImageUrl = snapshot.childSnapshot(forPath: "profileImageUrl").value as? String

//line below is where i am getting the error
self.isFollowing(userId: user.id!, completed: { (value) in
user.isFollowing = value
self.users.append(user)
self.tableView.reloadData()
})
})
}
})
}

func isFollowing(userId: String, completed: @escaping (Bool) -> Void) {
Api.Follow.isFollowing(userId: userId, completed: completed)
}

follow Api 中的代码:

var REF_FOLLOWERS = Database.database().reference().child("followers")

func isFollowing(userId: String, completed: @escaping (Bool) -> Void) {
REF_FOLLOWERS.child(userId).child(Api.User.CURRENT_USER!.uid).observeSingleEvent(of: .value, with: {
snapshot in
if let _ = snapshot.value as? NSNull {
completed(false)
} else {
completed(true)
}
})
}

提前致谢

最佳答案

您正在强制解包一个包含 nil 的可选值。

您应该在 updateView() 函数中使用 if letguard let 语句。

此外让 snap = child as! DataSnapshot 可能会失败,user.id! 在出现 nil 值时也会失败(考虑到错误消息和,这就是后者所发生的情况)你的评论)。您应该重写它们以安全地处理 nil 值情况。

最佳实践是不惜一切代价避免强制展开/bang 运算符 (!)。

关于ios - tableViewCell 按钮上的线程 1 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55265781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com