【问题标题】:UIDocumentInteractionController takes long time to show optionsUIDocumentInteractionController 需要很长时间才能显示选项
【发布时间】:2014-08-27 10:05:29
【问题描述】:

我使用 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

我不确定是什么问题。

【问题讨论】:

  • 我在使用 UIActivityViewController 来显示共享菜单时遇到了同样的问题。你找到解决办法了吗?
  • 我在使用 UIDocumentInteractionController 时遇到了一些异国情调的视频格式、pdf 和 doc 文件的问题。就我而言,我收到了内存警告,到目前为止我找不到解决方案。听说 UIActivityViewController 也有同样的问题,这很糟糕。
  • @user2163024 我找不到任何解决方案。我想在共享工作正常的 UiDocument 预览控制器中打开文档
  • @CalinChitu user2163024 而不是它,我使用了 UIActivityViewController,它没有出现任何问题。这个错误仍然存​​在于 iOS 8 GM 中,所以我将修复 UIActivityViewController。
  • @Prashanth Thx,我试试看。

标签: ios objective-c iphone ios8 uidocumentinteraction


【解决方案1】:

UIActivityViewController 在 iOS 8 中非常快。但是您无法在 Instagram、Vintiqu 等其他 3rd 方应用程序中打开图像。

另外,presentOpenInMenuFromRect 确实比 iOS 8 中的 presentOptionsMenuFromRect 更快(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];
    }

【讨论】:

  • 您的回答存在问题OpenInMenuFromRect 没有显示邮件、空投和iMessage 等选项。
【解决方案2】:

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

所以我将使用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

【讨论】:

  • 你试过用 UIActivityViewController 打开一个 pdf 文件吗?
  • 我试过了。还将自定义页面渲染器传递给activityItems。尽管处理得当,这会带来错误“未知活动项”
  • @KateGeld UIActivityController 的问题是它没有显示所有第三方应用程序。我对其进行了更多修改以支持第三方应用程序。我已经编辑了我的答案,请检查
【解决方案3】:

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

【讨论】:

  • 它对我不起作用......而不是 UIAcitivityController 工作......
  • presentOpenInMenuFromRect 的问题是它没有显示空投、邮件和 iMessage 选项......我需要这些选项,所以我使用 UIActivityViewController 并将内部活动用作 TTOpenInAppActivity
【解决方案4】:

简单的解决方案:将UIDocumentInteractionController 保留为视图控制器变量(属性或实例变量)并在viewDidLoad 中初始化它(在我的情况下,我在没有任何参数的情况下对其进行了初始化)。如果您要打开的文件URL是动态变化的,只需在呈现前更改UIDocumentInteractionController.URL属性即可。

【讨论】:

    【解决方案5】:

    当我传入代表PNG 图像的NSData 项目的字典时,我遇到了UIActivityViewController

    通过在activityViewControllerPlaceholderItem: 方法中将NSData 对象转换为UIImage 实例,我能够加快操作表的呈现速度。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多