Error: "unable to open database file" & "Too many open files"

Error: "unable to open database file" & "Too many open files"

我已经检查了很多关于 SO 的问题,例如 this & this,与这些错误相关,但让我告诉你我的情况。

我正在视图中加载图像,并且在我的代码 returns 中单击集合视图中的资产 18 次后出现此错误。我没有做任何复杂的事情,我只是添加了在该资产上方的视图中单击的相同资产。

信息:我正在创建资产并将它们保存在文档目录中并仅从那里获取它们。

下面是我的错误代码:

let data = try Data(contentsOf: URL(fileURLWithPath: (contentsOfFile: (userInfo[kPath] as! String))), options: .uncached)

我正在尝试获取 imageData,然后将其作为图像放在图像视图中,但在点击几下后,Try 语句返回以下错误

"Too many open files"

我也试过另一种加载图片的方式,即

UIImage(contentsOfFile: imageFilePath)!

但结果是一样的。

谁能指导我如何解决这个错误?

您与我们共享的代码不太可能是 "too many files open" 问题的根源,而更有可能只是另一个问题的症状。您的另一个错误 "unable to open database file" 表明更有可能是罪魁祸首,例如您可能正在打开数据库但没有正确关闭它们,最终导致打开的文件过多。

我建议仔细检查您打开文件的所有地方,并仔细检查您是否正确关闭了它们。特别是如果您正在执行自己的 sqlite3 API 调用,执行此操作非常容易,因为文件不会自动关闭。我建议在打开和关闭文件的任何地方添加日志记录语句,并确保每个 "open" 都与相应的 "close".

配对

如果文件的打开和关闭发生在 Swift 代码中,您有许多 ifguard 语句,通常将 "close" 放在 defer 语句是确保无论执行路径如何都调用关闭的好方法。


顺便说一句,与此文件打开问题无关,代码段中对 contentsOfFile 的引用是 misleading/unnecessary。您可以将其简化为:

let data = try Data(contentsOf: URL(fileURLWithPath: userInfo[kPath] as! String), options: .uncached)