我正在为 iPad 开发一个基于文档浏览器的应用程序。我一直在使用SKQueue来监视对文件的更改,以确保当用户在文档浏览器中执行操作时它们的元数据保持最新。启动监控的代码:
// Set up the queue
let delegate = self
queue = SKQueue(delegate: delegate)!
// Remove all existing paths
queue?.removeAllPaths()
// Get the list of PDF URLs using a function that enumerates a folder's contents
let pdfFiles = getFolderContents(rootFolder: myDocumentsFolder, extensionWanted: "pdf")
for pdfFilePath in pdfFiles.filePaths {
queue?.addPath(pdfFilePath.path)
}
for pdfFolderPath in pdfFiles.folderPaths {
queue?.addPath(pdfFolderPath.path)
}
我开发了自己的逻辑来响应来自此队列的通知,但在应用程序运行时我不会从队列中删除任何项目。
问题 - 似乎当观看的项目数量超过 200(文件和文件夹)时,系统会遇到问题,并且控制台会报告错误 24:打开的文件过多。之后,不能执行任何文件的读/写。
根据我从搜索中收集到的信息,iOS 和 iPadOS 似乎不允许同时访问超过 256 个文件描述符,这意味着 GCD 监控文件更改的方法将受到同样的限制.
有没有办法监控不受这种限制的文件更改?还有其他建议吗?