Получение NSMetadataItem для локальных файлов в iOS App Sandbox
Я знаю, что на iOS вы можете использовать только NSMetadataQuery
для файлов iCloud. Однако, согласно руководству Apple, вы все равно можете получить NSMetadataItem
ища нужный файл вручную FileWrapper
:
iOS позволяет выполнять поиск метаданных в iCloud для поиска файлов соответствующих файлов. Он предоставляет только интерфейс Objective C для запроса метаданных файла,
NSMetadataQuery
а такжеNSMetadataItem
, а также поддерживает только область поиска, которая ищет iCloud.В отличие от рабочего стола, песочница приложения iOS не доступна для поиска с использованием классов метаданных. Для поиска в изолированной программной среде вашего приложения вам нужно будет рекурсивно просматривать файлы в файловой системе изолированной программной среды, используя
NSFileManager
учебный класс. Как только найден соответствующий файл или файлы, вы можете получить к нему доступ тем способом, который вам требуется. Вы также можете использоватьNSMedatataItem
класс для получения метаданных для этого конкретного файла.
Тем не менее, я не мог найти способ получить NSMetadataItem
из локального файла в песочнице iOS. Вы можете инициализировать NSMetadataItem
из файла URL, но это доступно только в MacOS. FileManager
также, похоже, не имеет API для извлечения NSMetadataItem
от него.
Как я могу получить NSMetadataItem
для локальных файлов в iOS App Sandbox?
0 ответов
Использовать NSMetadataQuery
для запроса файлов iCloud добавьте наблюдателя для получения уведомления.
metaDataQuery.searchScopes = [NSMetadataQueryUbiquitousDocumentsScope, NSMetadataQueryUbiquitousDataScope]
NotificationCenter.default.addObserver(self, selector: #selector(self.metadataQueryDidFinishGathering),
name: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: metaDataQuery)
metaDataQuery.start()
func metadataQueryDidFinishGathering(notification: NSNotification) {
let result: [NSMedatataItem] = (notification.object as! NSMetadataQuery).results as! [NSMedatataItem]
// handle result
}