iOS社交应用点击他人个人主页显示当前登录用户问题排查求助
问题根源与快速修复方案
嘿,我一眼就揪出问题所在了!你的核心bug出在UserService.fetchUser这个方法里,和ProfileController其实没啥关系~
先看看你写的这段代码:
static func fetchUser(withUid uid: String, completion: @escaping(User) -> Void) { guard let uid = Auth.auth().currentUser?.uid else { return } Collection_Users.document(uid).getDocument { snapshot, error in guard let dictionary = snapshot?.data() else { return } let user = User(dictionary: dictionary) completion(user) } }
你明明在调用的时候传入了要查看的目标用户uid,但方法内部却直接把这个参数覆盖掉,改用当前登录用户的uid去查询Firebase文档了!不管你点击的是谁,最后查出来的都是你自己的用户数据,这就难怪显示的总是当前登录用户的信息了。
修复方法超简单
只需要把方法里那行多余的guard let uid = Auth.auth().currentUser?.uid else { return }删掉,直接用传入的uid参数就行:
static func fetchUser(withUid uid: String, completion: @escaping(User) -> Void) { Collection_Users.document(uid).getDocument { snapshot, error in guard let dictionary = snapshot?.data() else { return } let user = User(dictionary: dictionary) completion(user) } }
额外确认下其他环节(确保没别的坑)
修复后可以快速验证这几点:
- FeedCell的
showUserProfile方法确实传递了正确的viewModel.post.ownerUid(你已经打印过这个值是对的,这部分没问题) - FeedController里拿到uid后,正确调用了
UserService.fetchUser,并且用返回的user初始化了ProfileController(这部分代码逻辑是对的) - ProfileController的header也正确使用了传入的user来创建
ProfileHeaderViewModel(这部分也没问题)
改完之后再测试,点击其他用户的主页应该就能正常显示对方的信息啦!
内容的提问来源于stack exchange,提问作者haju kim
相关产品推荐
相关产品推荐

