Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将文件上载到Firebase会跳过代码行吗?_Ios_Swift_Firebase_Firebase Storage - Fatal编程技术网

Ios 将文件上载到Firebase会跳过代码行吗?

Ios 将文件上载到Firebase会跳过代码行吗?,ios,swift,firebase,firebase-storage,Ios,Swift,Firebase,Firebase Storage,我对swift和Firebase比较陌生,但我确实遇到了一个奇怪的问题。在调试器中乱搞之后,似乎发生了以下情况:以下函数似乎表现出奇怪的行为,例如跳过行storageRef.put() 所以现在发生的是,当用户点击保存按钮时,这个功能被触发。正如我在调试器中观察到的,调用了storageRef,但从未调用if-else语句。然后,在我的函数返回未正确初始化的对象后,它将返回带有正确值的if-else语句。。。到那时已经太晚了,因为返回并上载到数据库的值已经不正确 func toAnyObject

我对swift和Firebase比较陌生,但我确实遇到了一个奇怪的问题。在调试器中乱搞之后,似乎发生了以下情况:以下函数似乎表现出奇怪的行为,例如跳过行
storageRef.put()

所以现在发生的是,当用户点击保存按钮时,这个功能被触发。正如我在调试器中观察到的,调用了storageRef,但从未调用if-else语句。然后,在我的函数返回未正确初始化的对象后,它将返回带有正确值的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成功或失败时发生。请记住,网络流量意味着上传可能需要一些时间。如果要验证put是否成功或失败完成,只需在完成块内的适当位置添加断点,并在具有/不具有网络访问权限的设备上运行该方法(以测试两个代码流)。

请考虑更改您的方法。按钮目标操作是需要立即响应的典型解决方案

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

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

我建议您重新设计解决方案,以确保后续操作仅在put成功或失败时发生。请记住,网络流量意味着上传可能需要一些时间。如果要验证put是否成功完成或失败,只需在完成块内的适当位置添加断点,并在具有/不具有网络访问的设备上运行该方法(以测试两个代码流)