NSMetadataQuery не находит документы после их перемещения в iCloud
В моем приложении Mac у меня есть NSMetadataQuery
смотреть каталог приложения iCloud. Когда пользователь решает включить iCloud из приложения, я делаю следующее в следующем порядке:
- Вызов
[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]
установить доступ к контейнеру iCloud - Начать
NSMetadataQuery
найти все файлы (шаблон:"*"
) в контейнере iCloud - Теперь я перебираю все файлы в локальном контейнере и перемещаю их в iCloud, используя
[fileManager setUbiquitous:YES itemAtURL:fileURL destinationURL:targetURL error:&error]
У меня есть два типа документов, которые я перемещаю в iCloud:
- Фактические документы, хранящиеся в виде файловых пакетов
- Для каждого документа у меня есть
.preview
файл как простой двоичный файл
Моя проблема в том, что запрос метаданных возвращает только мои двоичные файлы предварительного просмотра, но не мои фактические документы, пока я не перезапущу свое приложение (или не открою окно Finder папки iCloud приложения из Терминала - в этом случае мое приложение получит другой результат запроса с все файлы).
Так это какая-то странная проблема с кешированием? Это потому, что документы представляют собой пакеты файлов, а не простые двоичные файлы?
Я не понимаю, почему это должно быть проблемой. Если я перезапущу свое приложение, запрос вернет все файлы правильно.
Может ли это быть проблемой с экспортом моего пользовательского типа документа в Info.plist
?
1 ответ
Может ли это быть проблемой с экспортом моего пользовательского типа документа в Info.plist?
Я полагаю, что так: проблема, которую вы описываете, наиболее вероятна, потому что ваш формат документа представляет собой пакет файлов (я предполагаю, что он написан с помощью NSFileWrapper). Помните, что бит пакета устанавливается при записи файла, поэтому, если у вас есть другие приложения, пишущие в iCloud, это может сделать проблему намного более запутанной, поскольку речь идет не о интерпретации пакета файла, а о его правильной записи.
К сожалению, NSMetadataQuery игнорирует папки, поэтому ваши файлы никогда не будут возвращены, пока вы правильно не зарегистрируете свой тип файла как пакет в приложении, которое записывает файл в контейнер iCloud.
В info.plist есть много схожих и потенциально запутанных настроек, так что многое может пойти не так. У меня возникла проблема, когда я правильно зарегистрировал свой тип файла документа в OS X, но не смог сделать это в iOS: /questions/7495780/nsmetadataquery-ne-nahodit-paketyi-papok-nsfilewrapper-tolko-fajlyi-no-oni-est/7495794#7495794
Первое, что вы должны сделать, это зайти на https://developer.icloud.com/ и посмотреть, смотрите ли вы файлы (правильно) или папки (проблема).
Работайте над типами документов info.plist до тех пор, пока вы не увидите документы в виде файлов.