2016-10-25 375 views
0

我試圖從Firebase存儲中下載Word文檔。在模擬器上,一切都按預期工作。然而,我的設備上,我得到以下錯誤:正在下載Firebase存儲文件設備問題

我一直在看似乎並沒有給我一個工作的答案

Optional(Error Domain=FIRStorageErrorDomain Code=-13000 "An unknown error occurred, please check the server response." UserInfo={object=26 October 2016.docx, bucket=app.appspot.com, NSLocalizedDescription=An unknown error occurred, please check the server response., ResponseErrorDomain=NSCocoaErrorDomain, NSFilePath=/tmp/bulletin, NSUnderlyingError=0x1702590b0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}, ResponseErrorCode=513})

其他職位,和所有我知道的是,有一個與文件權限的問題,連儘管我使用推薦的目錄(tmp)。

這是下載文件

let Ref_Bulletin = Bulletin.referenceForURL("gs:/app.appspot.com/Bulletin/\(Today.stringFromDate(NSDate())).docx") 

    // Create local filesystem URL 
    let localURL: NSURL! = NSURL(string: "file:///tmp/today.docx") 


     // Download to the local filesystem 
     let downloadTask = Ref_Bulletin.writeToFile(localURL) { (URL, error) -> Void in 
      if (error != nil) { 
       print(error.debugDescription) 
       // Uh-oh, an error occurred! 
      } else { 
       print("Working As Expected") 
       self.Web_View.loadRequest(NSURLRequest(URL: localURL)) 
      } 

那麼是什麼原因造成這個問題,如何解決它的代碼?

更新:

所以我試圖創建目錄,但我被告知,我沒有權限,即使文檔說我可以寫信給TMP。

Unable to create directory Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file 「today.docx」 in the folder 「h」." UserInfo={NSFilePath=/tmp/h/today.docx, NSUnderlyingError=0x1702498a0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

這是創建目錄代碼:

do { 
     try NSFileManager.defaultManager().createDirectoryAtPath(localURL.path!, withIntermediateDirectories: true, attributes: nil) 
    } catch let error as NSError { 
     NSLog("Unable to create directory \(error.debugDescription)") 
    } 
+0

[Firebase store:嘗試存儲到本地文件時出現錯誤]的可能重複(http://stackoverflow.com/questions/37792882/firebase-store-trying-to-store-to-local-file-gives - 錯誤) –

+0

看起來這是一個iOS問題:https://forums.developer.apple.com/thread/19844 –

+0

@MikeMcDonald但是,你已經聯繫我的答案說我可以寫入tmp,我已經更新了我的題。 –

回答

3

我認爲這裏的問題是,tmpDocuments目錄實際上並不住在/tmp/Documents(例如,它看起來好像/Documents實際上是/User/Documents,其實際上是/private/var/mobile/Documents,參見:https://www.theiphonewiki.com/wiki/

你會要確保你基於中斷的地方,系統認爲這些目錄的,而不是字符串創建文件網址:

NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory()]; 
NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"my_file"] URLByAppendingPathExtension:@"txt"]; 

或者爲NSDocumentDirectory相似。至於爲什麼可以在模擬器上工作:我認爲這是因爲模擬器上的沙盒與真實設備的工作方式不同,並且該/tmp顯然是您可以寫入的有效位置(儘管可能不是您想要的那個當你嘗試在真實的設備上進行測試時,iOS會發出一陣嘶嘶聲)。

+0

感謝Mike,它現在可以工作。但是,我不認爲這是在其他問題中提到的。 –