Я разрабатываю приложение для 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)
}
Я разработал собственный лог c для ответа на уведомления из этой очереди, но я не удаляю никаких элементов из очереди во время выполнения приложения.
Проблема - кажется, что когда количество просматриваемых элементов превышает 200 (файлы и папки), система сталкивается со стеной, и консоль сообщает об ошибке 24: Открыто слишком много файлов. После этого никакое чтение / запись любого файла не может быть выполнено.
Из того, что я смог собрать из поиска, кажется, что iOS и iPadOS не позволяют получить доступ к более чем 256 дескрипторам файлов на в то же время, и это будет означать, что подход GCD к мониторингу изменений файлов будет страдать от того же ограничения.
Есть ли способ отслеживания изменений файлов, который не подпадает под такое ограничение? Любые другие предложения?