4

我已经检查了 SO 上的许多问题,例如thisthis,与这些错误有关,但让我告诉你我的情况。

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

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

下面是我的错误代码:

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

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

“打开的文件太多”

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

UIImage(contentsOfFile: imageFilePath)!

但结果是一样的。

任何人都可以通过指导如何解决此错误来帮助我吗?

4

1 回答 1

4

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

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

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


作为与此文件打开问题无关的旁白,contentsOfFile您的代码片段中的引用具有误导性/不必要的。您可以将其简化为:

let data = try Data(contentsOf: URL(fileURLWithPath: userInfo[kPath] as! String), options: .uncached)
于 2017-01-10T19:56:37.593 回答