2016-04-25 67 views
0

我想上傳一個png文件到s3,然後將s3文件url存儲爲Firebase json格式。 s3部分工作正常,但Firebase函數以某種方式進入彙編代碼並且不運行。將文件上傳到s3然後將URL存儲在Firebase中 - Swift 2.2

,我得到的消息是:

火力地堡被編譯優化 - 步進可能行爲古怪;變量可能不可用。

func uploadToS3(writePath: NSURL) { 
    let ext = "png" 
    let uploadRequest = AWSS3TransferManagerUploadRequest() 
    uploadRequest.body = writePath 
    uploadRequest.key = NSProcessInfo.processInfo().globallyUniqueString + "." + ext 
    uploadRequest.bucket = S3BucketName 
    self.s3URL = NSURL(string: "http://s3.amazonaws.com/\(S3BucketName)/\(uploadRequest.key!)")! 
    uploadRequest.contentType = "image/" + ext 
    let transferManager = AWSS3TransferManager.defaultS3TransferManager() 
    transferManager.upload(uploadRequest).continueWithBlock { (task) -> AnyObject! in 
     if let error = task.error { 
      print("Upload failed ❌ (\(error))") 
     } 
     if let exception = task.exception { 
      print("Upload failed ❌ (\(exception))") 
     } 
     if task.result != nil { 
      print("Uploaded to:\n\(self.s3URL)") 
      updateFirebase(self.s3URL) **this doesn't run** 
     } 
     else { 
      print("Unexpected empty result.") 
     } 
     return nil 
    } 
} 
func updateFirebase(url: NSURL){ 
    let ref = self.userRef.childByAppendingPath(self.uid).childByAppendingPath("photos") 
    ref.updateChildValues([url.absoluteString: true]) 
    print("updated firebase") 
} 

感謝任何幫助!

+1

TransferManager塊中的任何內容是否被調用?即在該塊中添加一條打印語句並查看它是否到達那裏。另外,是否有某種期望的返回值(返回nil?)。最後,**這不運行**是什麼意思?它永遠不會到達那條線,或者它在*那條線上崩潰* – Jay

+0

它被調用,「上傳到:\ n \(self.s3URL)」被打印出來。 updateFirebase(url:NSURL)方法不運行,而是「Firebase編譯爲優化 - 步進可能表現異常;變量可能不可用」。打印出來在控制檯 即讓ref = self.userRef .......... 和ref.updateChildValues ........... –

回答

0

一種可能性是您的構建設置被設置爲釋放而不是調試。該設置位於項目設置中,然後合併到Swift編譯器 - 代碼生成的底部。調試應該是None並且發佈應該是快速的。我認爲這些是默認設置,但值得一檢查

第二個將是構建配置是錯誤的。在窗口頂部選擇您的項目名稱,然後下拉到編輯架構,並將生成配置設置爲調試。

我在一年前遇到過這種情況,創建一個新項目並導入文件的速度更快 - 您的milage可能會有所不同。