簡體   English   中英

錯誤:“無法打開數據庫文件”和“打開的文件過多”

[英]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代碼中發生的,你有許多ifguard語句,通常將“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM