将文件上传到firebase是跳过代码行



我对Swift和Firebase是相对较新的,但是我肯定会遇到一个奇怪的问题。在调试器中弄乱后似乎发生的事情是,以下功能似乎表现出奇怪的行为,例如跳过线storageRef.put()

因此,发生了什么事,当用户单击"保存"按钮时,将触发此功能。正如我在调试器中观察到的那样,storageref被称为,但如果其他陈述从未被调用。然后,在我的函数返回未正确活化的对象之后,它将返回带有适当值的if else语句...到那时为时已晚,因为返回并上传到数据库的值已经不正确。

func toAnyObject() -> [String : Any] {
        beforeImageUrl = ""
        let storageRef = FIRStorage.storage().reference().child("myImage.png")
        let uploadData = UIImagePNGRepresentation(beforeImage!)
        storageRef.put(uploadData!, metadata: nil) { (metadata, error) in
            if (error != nil) {
                print(error)
            } else {
                self.beforeImageUrl = (metadata?.downloadURL()?.absoluteString)!
                print("upload complete: (metadata?.downloadURL())")
            }
        }
        let firebaseJobObject : [String: Any] = ["jobType"          :  jobType! as Any,
                                                 "jobDescription"   :  jobDescription! as Any,
                                                 "beforeImageUrl"   :  beforeImageUrl! as Any,]
        return firebaseJobObject
    }

在此处考虑您的方法的更改。按钮目标行动是需要立即响应的解决方案的典型特征。

但是,当您涉及上述- (FIRStorageUploadTask *)putData:(NSData *)uploadData方法(通过网络)的其他进程(通过网络)时,只要服务器端方法返回值,就必须使用某种形式的委托执行延迟操作。

请记住,当您尝试使用上述方法时,它并非用于与大文件一起使用。您应该使用- (FIRStorageUploadTask *)putFile:(NSURL *)fileURL方法。

我建议您重新制定解决方案,以确保只有在证券成功或失败时才会发生后续行动。请记住,网络流量意味着上传可能需要一些时间。如果您想验证PUT在成功或失败的情况下完成的,只需在完成块内的适当位置添加一个断点,然后在设备上运行使用/和无网络访问的方法(以测试两个代码流)。<<<<<<

相关内容

  • 没有找到相关文章

最新更新