在swiftUI中加载图片,展开时会导致nil

问题描述 投票:0回答:1

我遇到以下错误:

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

在我的ProfileView()即时消息中使用import URLImage库。

                URLImage(URL(string: self.profileViewModel.profileURL)!, placeholder: Image(systemName: "circle"),
                     content:  {
                        $0.image
                            .resizable()
                            .aspectRatio(contentMode: .fill)
                            .frame(width: 130, height: 130)
                            .cornerRadius(15)
                            .overlay(
                                Image(systemName: "plus.circle.fill")
                                    .foregroundColor(.gray)
                                    .font(.largeTitle)
                                ,alignment: .bottomTrailing)
                            .onTapGesture {
                                self.profileViewModel.showImagePicker = true
                            }
                        }
            )

在我的ProfileView()即时消息中使用.onAppear(perform: loadUserData)

这很好,可以为用户恢复正确的数据并按预期显示。

 func LoadAUser(userId: String) {
    Firestore.firestore().collection("users").document(userId).getDocument{(snapshot, error) in
        guard let snap = snapshot else {
            print("error fetching data")
            return
        }
        let dict = snap.data()
        guard let decodedUser = try? User.init(fromDictionary: dict!) else { return }
        print("decoded user - load user - \(decodedUser)")
        self.bio = decodedUser.bio
        self.occupation = decodedUser.occupation
        self.city = decodedUser.city
        self.profileURL = decodedUser.profileURL

        let storageRoot = Storage.storage().reference(forURL: "gs://myapp.appspot.com").child("avatar").child(userId)

        storageRoot.downloadURL{(url, error) in
            if error != nil {
                print(error!.localizedDescription)
                return
            }
            let profileDownload = url?.absoluteString
            self.profileURL = profileDownload!
        }

        print("profileURL - \(self.profileURL)")
    }
}

存储中有一个图像,我可以检索它,因为日志显示print("profileURL - \(self.profileURL)")这里一切都很好

我似乎无法在ProfileView()中显示个人资料图片>

该功能在配置文件视图中被调用,就像在.onAppear中那样>>

func loadUserData() {
    DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
        self.profileViewModel.LoadAUser(userId: Auth.auth().currentUser!.uid)
    }
}

我曾尝试添加延迟:

DispatchQueue.main.asyncAfter(deadline: .now() + 10)

只是图像不会加载,我不确定在加载其他所有内容时为什么会说found nil,但是当我添加此URLImage以将图像带回时,它显示为nil,即使日志说它具有正确的URL 。

UPDATE

我有一个class ProfileViewModel: ObservableObject

哪个有

@Published var profileURL: String = ""

在loadAUser函数中。我设置了:

self.profileURL = profileDownload!

我遇到以下错误:线程1:致命错误:在使用导入URLImage库在我的ProfileView()im中解开可选值时,意外发现nil。 URLImage(URL(...

swiftui firebase-storage
1个回答
0
投票

我看不到您发布的代码中的错误,但是关于您的课程,有些事情您没有发布过:

您似乎有一个类(profileViewModel),必须将图像保存到该类中,该变量位于类的顶部,声明如下:@Published var image ...

© www.soinside.com 2019 - 2024. All rights reserved.