UIDocumentInteractionController需要很长时间才能显示选项

时间:2014-08-27 10:05:30

标签: ios objective-c iphone ios8 uidocumentinteraction

我已经使用UIDocumentInteractionController来共享文件,但它在iOS 8 beta 5中25秒后打开菜单选项,并且在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

我不确定问题是什么。

5 个答案:

答案 0 :(得分:3)

UIActivityViewController在iOS 8中速度非常快。但是,您无法在Instagram,Vintiqu等其他第三方应用程序中打开图像。

此外,presentOpenInMenuFromRect实际上比iOS 8中的presentOptionsMenuFromRect快(iOS 8.0.2也是如此)。 但是,presentOpenInMenuFromRect不显示共享操作。

我想为用户提供&#34;保存图片,分配给联系人,复制,打印,...&#34;在共享视图上。 所以,我目前的解决方法如下:(

    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];
    }

答案 1 :(得分:2)

我使用了UIActivityViewController并没有出现任何问题。 iOS 8发布版本中仍存在此错误

所以我要使用UIActivityViewController修复。

我已使用TYOpenInAppActivityUIActivityViewController

中显示第三方应用
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 :(得分:1)

到目前为止我的解决方法是使用presentOpenInMenuFromRect代替presentOptionsMenuFromRect,这将显示更少的项目,但至少它不会导致内存问题。在iOS 8 beta 5下,QuickLook选项似乎也有问题,除了电影内存问题之外,pdf快速查看也不起作用。

答案 3 :(得分:1)

简单的解决方案:将UIDocumentInteractionController保持为View Controller变量(属性或实例var)并在viewDidLoad内初始化它(在我的情况下,我在没有任何参数的情况下初始化它)。如果要打开的fileURL是动态更改的,只需在显示之前更改UIDocumentInteractionController.URL属性。

答案 4 :(得分:0)

我在使用代表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;
}