[英]Error: “unable to open database file” & “Too many open files”
我已經檢查過很多關於SO的問題,比如這個和這個 ,與這些錯誤相關,但讓我告訴你我的情景。
我在視圖上加載圖像,在集合視圖中單擊資產18次后,我的代碼返回此錯誤。 我沒有做任何復雜的事情我只是添加了相同的資產,該資產被點擊在該資產上方的視圖上。
信息:我正在創建資產並將它們保存在文檔目錄中並僅從那里獲取它們。
以下是我的代碼,其中出現錯誤:
let data = try Data(contentsOf: URL(fileURLWithPath: (contentsOfFile: (userInfo[kPath] as! String))), options: .uncached)
我試圖獲取imageData然后將其作為圖像放在圖像視圖中,但在幾次單擊后,Try語句將返回以下錯誤
“太多打開的文件”
我還嘗試了另一種加載圖像的方法,即
UIImage(contentsOfFile: imageFilePath)!
但結果是一樣的。
任何人都可以通過指導如何解決此錯誤來幫助我嗎?
您與我們共享的代碼不太可能是“太多文件打開”問題的來源,而更可能只是另一個問題的症狀。 你的另一個錯誤,“無法打開數據庫文件”暗示了一個更可能的罪魁禍首,例如你可能正在打開數據庫但沒有正確關閉它們,最終導致打開太多文件。
我建議仔細檢查你打開文件的所有地方,並仔細檢查你是否正確關閉它們。 特別是如果您正在進行自己的sqlite3 API調用,這樣做非常容易,因為文件不會自動關閉。 我建議在打開和關閉文件的任何地方添加日志記錄語句,並確保每個“打開”與相應的“關閉”配對。
如果文件的打開和關閉是在Swift代碼中發生的,你有許多if
或guard
語句,通常將“close”放在defer
語句中是一種確保無論執行路徑如何都要調用close的好方法。
與此文件打開問題無關,在代碼片段中對contentsOfFile
的引用是誤導/不必要的。 您可以將其簡化為:
let data = try Data(contentsOf: URL(fileURLWithPath: userInfo[kPath] as! String), options: .uncached)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.