2017-07-31 162 views
-1

後,我有一個使用CloudKit作爲後端的應用程序,其中有一些CKRecords一些CKAssets無法訪問文件將其移動到文件目錄

其中有些資產是PDF文件,我沒有在打開它們所述QuickLook Previewer

擷取記錄後,我保存CKAssetURLs在陣列中,用下面的代碼:

guard let assets = attachment["attachments"] as? [CKAsset] else { return } 
assets.forEach({ (asset) in 
    attachmentsURLs.append(asset.fileURL) 
}) 

fileURL被莫名其妙地打印:

file:///private/var/mobile/Containers/Data/Application/C4406091-B55C-46AC-A612-69052F2275BB/Library/Caches/CloudKit/34af81edf8344be1cf473ef394e06ccc8e1bc8cf/Assets/85DEDDB6-FB5B-4BC9-AB93-D8951AC304F7.012af7f83e322df6d0d1829b94956e4b829edbe974

最後的字符串:85DEDDB6-FB5B-4BC9-AB93-D8951AC304F7.012af7f83e322df6d0d1829b94956e4b829edbe974是文件本身,有這個我嘗試將此文件移動到DocumentsDirectory

我試着將它們移動和重命名他們,給他們的特定擴展,在這種特殊情況下將.pdf

我做這個用下面的代碼:

let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] 
var url = URL.init(fileURLWithPath: documentsPath) 
let component = NSUUID().uuidString + "." + fileExtensions[index] 
url.appendPathComponent(component) 

do { 
    try FileManager.default.moveItem(at: fileURL as URL, to: url) 
} catch { 
    print("Failed to save attachment with extension with error:", error) 
    return 
} 

正如你所看到的,我將緩存的文件移動到文檔目錄,並使用隨機字符串+文件擴展名對其進行重命名。

使用iOS模擬器,一切都按預期工作。

該文件會從搬到這裏: file:///Users/ivancantarino/Library/Developer/CoreSimulator/Devices/CCE2FCA5-05F0-4BB7-9A25-CBC168398A62/data/Containers/Data/Application/561A3461-0048-4676-808F-2D96B74DBDCD/Library/Caches/CloudKit/34af81edf8344be1cf473ef394e06ccc8e1bc8cf/Assets/FADF0479-E7AE-4340-83C5-C9E0889E4E87.012af7f83e322df6d0d1829b94956e4b829edbe974

到這裏:

file:///Users/ivancantarino/Library/Developer/CoreSimulator/Devices/CCE2FCA5-05F0-4BB7-9A25-CBC168398A62/data/Containers/Data/Application/561A3461-0048-4676-808F-2D96B74DBDCD/Documents/52CAC8CD-EF0E-4E55-8D1B-8B267D07BAAA.pdf

而且他們我充滿QuickLook數據源,我可以在真實的iPhone然而可視化文件不如預期,設備這不起作用。

預覽顯示一個空文件,並帶有ZERO KB

在真實設備上的文件被從這裏移動:

file:///private/var/mobile/Containers/Data/Application/6870DDC2-32FD-4FF2-89F4-04F87BBE534B/Library/Caches/CloudKit/34af81edf8344be1cf473ef394e06ccc8e1bc8cf/Assets/A187A987-BE4E-4C6A-9CBE-E66F3FEF7333.012af7f83e322df6d0d1829b94956e4b829edbe974

到這裏:

file:///var/mobile/Containers/Data/Application/6870DDC2-32FD-4FF2-89F4-04F87BBE534B/Documents/FD501C6D-9E95-46DD-BC58-EA2C45B62DAC.pdf

什麼可以造成這個問題?

爲什麼在模擬器中可以正常工作,並且不能在設備上工作?

我試了很多不同的東西,這讓我瘋狂。

任何提示?

謝謝。

回答

-1

嗯,我解決了這個問題,說實話有點尷尬,我會解釋一下。

由於我使用的是蘋果,這在我看來是相當驚人的QuickLook框架,我不得不實施,以便在QuickLook protocol方法,填補了datasource能夠呈現所需的文件,問題是在這裏。

獲取所需文件後,我將URLs保存在[URL]陣列中。

QuickLook protocol方法numberOfPreviewItems(:_)我返回[URL].count作爲項目的數量,並在previewController(:_)->QLPreviewItem我做了以下內容:

func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem { 
    let doc = URL(fileURLWithPath: attachmentURLs[index].absoluteString) 
    return doc as QLPreviewItem 
} 

但如果你注意到,在doc變量用URL(fileWithPath)和我發起正在通過URL.absoluteString這不指向特定的文件;

相反,我轉換這條線以下:

let doc = URL(fileURLWithPath: attachmentURLs[index].path) 

因爲我想訪問給定的緩存URLPath,並通過這樣一切都工作正常。

令人頭疼的是,以前實施的方法在iOS Simulator中工作,但不在真實的設備上,這導致我以不同的方式尋求答案。

+0

仍然沒有得到downvote –

相關問題