我一直在研究一個新的基於文檔的應用程序,並對新的UIDocumentBrowserController感到非常高興......試圖爲我自己的文檔瀏覽器解決方案UI很棘手!遇到問題讓UIDocumentBrowserController在基於文檔的應用程序中打開文檔
我在瀏覽器創建後打開文檔時遇到了一些麻煩。
現在發生的情況是,當我選擇在文檔瀏覽器中創建新文檔時,雖然會記錄錯誤消息,但是文檔已按預期創建並打開。但是,在文檔關閉後,即使顯示文檔,我也無法立即重新打開文件,也無法在後續啓動時重新打開文件。然而,這裏一個奇怪的線索是,如果我在創建文檔後停止運行應用程序,但不向其添加新信息(觸發保存週期),並再次運行項目,則可以正確打開該文件。這使得我認爲文件被保存的方式存在問題。 (注意:在這個階段,我正在努力使本地非icloud實現工作,然後再繼續進行icloud實現。)
以下是代碼中任何時候出現錯誤消息的文檔保存到磁盤(或者至少大部分時間!): 2017-06-20 13:21:58.254938-0500 Sermon Design 2 iOS [22454:5000138] [默認] [錯誤]無法獲取項目的屬性值文件:///用戶/ stevenhovater /庫/開發商/ CoreSimulator /設備/ 9A4364F2-B3A1-4AD9-B680-FB4BC876C707 /數據/集裝箱/數據/應用/ DD534ED8-C4A3-40FE-9777-AED961976878 /文檔/無題 - 9 。講道。錯誤:錯誤域= NSFileProviderInternalErrorDomain代碼= 1「讀者不被允許訪問該URL。」 UserInfo = {NSLocalizedDescription =讀者不允許訪問該URL}
我懷疑問題在於我的文檔類型plists中的某些問題,我試圖通過模擬wwdc視頻中的設置來設置問題2017會話229.
我的文檔由NSData對象封裝,使用我認爲是UIDocument的一個相當標準的子類實現。 (我省略了代碼來生成縮略圖)
override func contents(forType typeName: String) throws -> Any {
print("Saving Document Changes")
if sermon != nil {
let newData = NSKeyedArchiver.archivedData(withRootObject: sermon!)
return newData
} else {
let newData = NSKeyedArchiver.archivedData(withRootObject: Sermon())
return newData
}
}
override func fileAttributesToWrite(to url: URL, for saveOperation: UIDocumentSaveOperation) throws -> [AnyHashable : Any] {
let thumbnail:UIImage = self.createThumbnail()
let thumbnaildict = [URLThumbnailDictionaryItem.NSThumbnail1024x1024SizeKey : thumbnail]
let dict = [URLResourceKey.thumbnailDictionaryKey:thumbnaildict]
return dict
}
override func load(fromContents contents: Any, ofType typeName: String?) throws {
guard let newSermon:Sermon = NSKeyedUnarchiver.unarchiveObject(with: contents as! Data) as? Sermon else{
throw documentErrors.invalidFile
}
self.sermon = newSermon
}
在我UIDocumentBrowserViewController的子類,這裏是我得到一個本地文件名和創建新的文件代碼。
你有沒有設法解決它? :/ –
這是否有錯誤報告? – olynoise
我已經提交了一個錯誤報告。 #35033364 – olynoise