Слишком много файлов открыто при мониторинге изменений файлов - PullRequest
0 голосов
/ 27 апреля 2020

Я разрабатываю приложение для 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 к мониторингу изменений файлов будет страдать от того же ограничения.

Есть ли способ отслеживания изменений файлов, который не подпадает под такое ограничение? Любые другие предложения?

...