从Cloud Firestore使用核心数据提取数据后保存空数据模型

我遇到的问题是与Firestore数据库通信后,Core Data无法正确保存。我想将每个帖子的用户图像和名称存储在缓存中以提高性能。目前,我有两个名为UsersPostItem的数据模型。 Users是处理我要保存的用户数据的人。我成功实现了PostItem,但没有实现Users

我认为它可以处理Firestore,但不是完全确定。代码:

     private var username = String()
        private var imageLink = String()
        private var db = Firestore.firestore().collection("users")
        
        func fetchUser(_ id: String) -> String {
            db.document(id).getDocument { (snap,err) in
                if let snap = snap,snap.exists {
                    self.username = snap.data()!["username"] as! String
                } else {
                    print("Document does not exist")
                }
            }
            print("DB: \(self.username)")
            return self.username
        }
        
        func fetchUserImage(_ id: String) -> String {
            db.document(id).getDocument { (snap,snap.exists {
                    self.imageLink = snap.data()!["image"] as? String ?? ""
                }else{
                    print("Document does not exist")
                }
            }
            print("DB: \(self.imageLink)")
            return self.imageLink
        }
        
        func setUpPosts(managedobjectcontext: NSmanagedobjectcontext) {
            if !self.newposts.isEmpty{
                for i in self.newposts{
                    let user = Users(context: managedobjectcontext)
                    print("Fetched Name: \(self.fetchUser(i.user))")
                    user.name = self.username
                    print("Fetched Image: \(self.fetchUserImage(i.user))")
                    user.image = self.fetchUserImage(i.user)
                    user.uuid = i.user
                    
                    let post = PostItem(context: managedobjectcontext)
                    post.type = i.type
                    post.user = i.user
                    post.image = i.thumb
                    post.id = i.id
                    post.text = i.text
                    post.comment = i.comments
                    post.video = i.media
                    do{
                        try managedobjectcontext.save()
                    }catch{
                        print(error)
                    }
                    self.clearNewPosts()
                }
            }
        }

setUpPosts()是在处理所有视图数据的类的初始化器中调用的。

iCMS 回答:从Cloud Firestore使用核心数据提取数据后保存空数据模型

大多数Firebase调用是异步的。在您的代码中,db.document(id).getDocument是一个异步调用,因此当您从self.userName / self.imageLink返回时,nilfetchUser将为空/ fetchUserImage

Firestore始终使用本地缓存(来自docs:“对于Android和iOS,默认情况下启用了离线持久性。”),所以我不建议您实现自己的缓存。

对于缓存图像,我建议看一下iOS的FirebaseUI-它提供了integration with SDWebImage,它将为您处理缓存。

本文链接:https://www.f2er.com/1602572.html

大家都在问