UIDocumentInteractionController занимает много времени, чтобы показать параметры

Я использовал UIDocumentInteractionController для обмена файлами, но он открывает параметры меню через 25 секунд в iOS 8 beta 5 и отлично работает в iOS 7.1.

Я проверил журнал, который я вставил ниже

Errors encountered while discovering extensions: Error Domain=PlugInKit Code=13 "query cancelled" UserInfo=0x79bd5ef0 {NSLocalizedDescription=query cancelled}
2014-08-27 15:02:05.634 Localwire[82067:1364165] Unknown activity items supplied: (
        {
        "com.microsoft.excel.xls" = <d0cf11e0 a1b11ae1 00000000 00000000 00000000 00000000 3e000300 feff0900 06000000 00000000 00000000 10000000 01000000 00000000 00100000 cb070000 01000000 feffffff 00000000 00000000 62000000 e3000000 64010000 e5010000 66020000 e7020000 68030000 e9030000 6a040000 eb040000 6c050000 ed050000 6e060000 ef060000 70070000 ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff

Я не уверен, в чем проблема.

Ответ 1

Я использовал UIActivityViewController, который не обнаружил никаких проблем. Эта ошибка все еще присутствует в версии версии iOS 8

Итак, я собираюсь с исправлением UIActivityViewController.

Я использовал TYOpenInAppActivity для показа сторонних приложений в UIActivityViewController

NSURL *URL = [NSURL fileURLWithPath:filePath];
TTOpenInAppActivity *openInAppActivity = [[TTOpenInAppActivity alloc] initWithView:self.view andBarButtonItem:barButton];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[URL] applicationActivities:@[openInAppActivity]];
    // Create pop up
    self.activityPopoverController = [[UIPopoverController alloc] initWithContentViewController:activityViewController];
    // Store reference to superview (UIPopoverController) to allow dismissal
    openInAppActivity.superViewController = self.activityPopoverController;
    // Show UIActivityViewController in popup
    [self.activityPopoverController presentPopoverFromRect:((UIButton *)sender).frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

Вы можете найти контроллер TTOpenInAppActivity в следующей ссылке.

https://github.com/honkmaster/TTOpenInAppActivity

Ответ 2

UIActivityViewController очень быстро работает в iOS 8. Однако вы не можете открывать изображения в других сторонних приложениях, таких как Instagram, Vintiqu и т.д.

Кроме того, presentOpenInMenuFromRect действительно быстрее, чем presentOptionsMenuFromRect в iOS 8 (iOS 8.0.2 тоже). Но presentOpenInMenuFromRect не показывает действия совместного доступа.

Я хочу предоставить пользователям "Сохранить изображение, Назначить для связи, Копировать, Печать и..." в представлении совместного доступа. Итак, мое текущее решение такое же, как показано ниже: (

    if( SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
        [self.udic presentOpenInMenuFromRect:CGRectMake(self.view.frame.size.width/2 - 49/2, self.view.frame.size.height-49, 49, 49)  inView:self.view animated:YES];
    } else {
        [self.udic presentOptionsMenuFromRect:CGRectMake(self.view.frame.size.width/2 - 49/2, self.view.frame.size.height-49, 49, 49)  inView:self.view animated:YES];
    }

Ответ 3

Моим обходным решением до сих пор является использование presentOpenInMenuFromRect вместо presentOptionsMenuFromRect, это покажет меньше предметов, но по крайней мере это не вызовет проблемы с памятью. Опция QuickLook, похоже, глючит под iOS 8 beta 5, а также быстрый просмотр pdf не работает, помимо проблем с памятью памяти.

Ответ 4

Простое решение: сохраните UIDocumentInteractionController как переменную View Controller (свойство или экземпляр var) и запустите ее внутри viewDidLoad (в моем случае я инициализировал ее без каких-либо параметров). Если файлURL, который вы хотите открыть, динамически изменяется, просто измените свойство UIDocumentInteractionController.URL перед представлением.

Ответ 5

Я запускаю это с помощью UIActivityViewController при передаче в словаре NSData элементов, которые представляют PNG изображения.

Мне удалось ускорить рендеринг листа действий, преобразовывая объекты NSData в экземпляры UIImage в методе activityViewControllerPlaceholderItem:.

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController {
    NSMutableDictionary *itemPlaceholders = [NSMutableDictionary dictionary];

   [self.items enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSData *obj, BOOL *stop) {
       UIImage *placeholderImage = [UIImage imageWithData:obj scale:.5];
       [itemPlaceholders setObject:placeholderImage forKey:key];
   }];

   return itemPlaceholders;
}