NSMetadataQuery не находит документы после их перемещения в iCloud

В моем приложении Mac у меня есть NSMetadataQuery смотреть каталог приложения iCloud. Когда пользователь решает включить iCloud из приложения, я делаю следующее в следующем порядке:

  1. Вызов [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil] установить доступ к контейнеру iCloud
  2. Начать NSMetadataQuery найти все файлы (шаблон: "*") в контейнере iCloud
  3. Теперь я перебираю все файлы в локальном контейнере и перемещаю их в iCloud, используя [fileManager setUbiquitous:YES itemAtURL:fileURL destinationURL:targetURL error:&error]

У меня есть два типа документов, которые я перемещаю в iCloud:

  1. Фактические документы, хранящиеся в виде файловых пакетов
  2. Для каждого документа у меня есть .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 до тех пор, пока вы не увидите документы в виде файлов.

Другие вопросы по тегам