繁体   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