Подтвердить что ты не робот

UIDocumentInteractionController presentOptionsMenuFromBarButtonItem ошибка в ios8- Неизвестные элементы активности, предоставленные

UIDocumentInteractionController presentOptionsMenuFromBarButtonItem дает мне консольную ошибку в оборудовании ios8 (а не на аппаратном обеспечении 7.1 или ранее):

 Unknown activity items supplied: (
    {
    "com.adobe.pdf" = ;
},
""
 )

В моей официальной версии App Store моего приложения приложение падает с этого момента. Когда я компилирую и запускаю на своем iPad, он просто дает ошибку, но не падает.

Мой код:

В .h:

UIDocumentInteractionController *docInteractionController;

В .m:

self.docInteractionController = [UIDocumentInteractionController interactionControllerWithURL:fileURL];

self.docInteractionController.delegate = self;
//UIBarButtonItem *element is an element in my toolbar
[self.docInteractionController presentOptionsMenuFromBarButtonItem:element animated:YES];

Если я делаю NSLog docInteractionController.UTI, я вижу "com.adobe.pdf" на консоли, поэтому UTI распознается должным образом.

Я могу обойти "Неизвестные элементы активности", используя presentOpenInMenuFromBarButtonItem вместо presentOptionsMenuFromBarButtonItem для вызова UIDocumentInteractionController, но я хочу показать пользователю параметры печати и электронной почты, а также не только параметры открытия внешнего приложения.

Протестировано на iPad версии 8.0.2. Xcode версии 6.0.1, цель развертывания 6.0 (также протестирована с целью развертывания 8.0). Все objective-c. Запуск версии iPad версии 7.1 не вызывает ошибки.

4b9b3361

Ответ 1

Смотрите радар: http://openradar.appspot.com/radar?id=5800473659441152

  • Как уже отмечалось, вы можете использовать presentOpenInMenu вместо presentOptionsMenu. Вы потеряете почтовый параметр, но вы можете сделать это самостоятельно с помощью MFMailComposeViewController с выделенной почтовой кнопкой.
  • Или используйте UIActivityViewController с элементом действия "Открыть в".
  • Или просто UIActivityViewController без элемента "Открыть в", если этого достаточно.
  • Или делать presentOptionsMenu в среде выполнения iOS7 и UIActivityViewController в среде iOS8 + (где существуют расширения общего доступа)

Ответ 2

Для людей, которые не хотят использовать UIActivityViewController, потому что контроллер документа - это то, что мы хотим (все действия отображаются): вы можете обойти крушение, сохранив UIDocumentInteractionController, например. путем присвоения ему свойства и освобождения при завершении взаимодействия с документом:

- (void)share:(id)sender
{
    self.documentInteraction = [UIDocumentInteractionController interactionControllerWithURL:_shareURL];
    _documentInteraction.delegate = self;
    _documentInteraction.name = self.title;

    [_documentInteraction presentOptionsMenuFromBarButtonItem:_actionItem animated:YES];
}

- (void)documentInteractionControllerDidDismissOptionsMenu:(UIDocumentInteractionController *)controller
{
    if (controller == _documentInteraction) {
        self.documentInteraction = nil;
    }
}

Журнал по-прежнему будет отображаться, по крайней мере, в отладочном режиме, не проверяется с помощью сборки релиза. Но все это работает.

Ответ 3

Это решило проблему для меня:

dispatch_async(dispatch_get_main_queue(), ^() {
      [_docController presentOptionsMenuFromRect:button.bounds inView:button animated:YES];              
   });

Ответ 4

Я получал одни и те же консольные журналы, но только в сборках отладки. Попробуйте создать сборку релизов, и вы должны увидеть, что она по-прежнему печатает сообщение "Неизвестные операции с товарами", но без всего содержимого файла.