Ios UIDocumentInteractionController真的很慢

Ios UIDocumentInteractionController真的很慢,ios,uicollectionview,Ios,Uicollectionview,我在iOS 7.1中使用UIDocumentInteractionController,它的性能非常差 我在UICollectionViewController中使用它在集合视图中查看文档 在“收藏”视图中按某个项目时,显示该项目大约需要6秒(是的,即6秒)。从用户体验的角度来看,他们在屏幕出现之前又按下了几次,因为这需要很长时间 自从iOS 6以来,我一直在使用相同的代码,但现在看起来特别糟糕。如果有人对我如何加快速度有任何想法,我将不胜感激 基本上,我的头文件中包含以下内容: interfa

我在iOS 7.1中使用UIDocumentInteractionController,它的性能非常差

我在UICollectionViewController中使用它在集合视图中查看文档

在“收藏”视图中按某个项目时,显示该项目大约需要6秒(是的,即6秒)。从用户体验的角度来看,他们在屏幕出现之前又按下了几次,因为这需要很长时间

自从iOS 6以来,我一直在使用相同的代码,但现在看起来特别糟糕。如果有人对我如何加快速度有任何想法,我将不胜感激

基本上,我的头文件中包含以下内容:

interface MyViewController : UICollectionViewController <UIDocumentInteractionControllerDelegate>
{
    UIDocumentInteractionController *docController;
}
@end
然后在collectionView中:didSelectItemAtIndexPath:我正在这样做:

NSURL *fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:document.Link ofType:@"" ]];
[docController setURL:fileURL];
PresentationViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"DocumentCell" forIndexPath:indexPath];
CGRect rect1 = cell.frame;
bool didShow = [docController presentOptionsMenuFromRect:rect1 inView:collectionView animated:YES];
其中document只是一个带有URL字符串的类

如果你需要任何进一步的细节,请告诉我

提前感谢任何人提供的任何帮助

--更新: 在一些NSLog之后,我注意到下面这行的速度肯定很慢:

bool didShow = [docController presentOptionsMenuFromRect:rect1 inView:collectionView animated:YES];

TL;医生:

    - (BOOL)presentOptionsMenuFromRect:(CGRect)rect
                                inView:(UIView *)view
                              animated:(BOOL)animated
    - (BOOL)presentOpenInMenuFromRect:(CGRect)rect
                               inView:(UIView *)view
                             animated:(BOOL)animated
您使用的方法是一个同步请求,该请求使用您的文档数据来查找哪些应用程序能够读取您的文件。您需要与异步版本交换,该版本将枚举限制为只能解析您的文件类型的应用程序

删除此方法:

    - (BOOL)presentOptionsMenuFromRect:(CGRect)rect
                                inView:(UIView *)view
                              animated:(BOOL)animated
    - (BOOL)presentOpenInMenuFromRect:(CGRect)rect
                               inView:(UIView *)view
                             animated:(BOOL)animated
并替换为此方法:

    - (BOOL)presentOptionsMenuFromRect:(CGRect)rect
                                inView:(UIView *)view
                              animated:(BOOL)animated
    - (BOOL)presentOpenInMenuFromRect:(CGRect)rect
                               inView:(UIView *)view
                             animated:(BOOL)animated
摘自:

    - (BOOL)presentOptionsMenuFromRect:(CGRect)rect
                                inView:(UIView *)view
                              animated:(BOOL)animated
    - (BOOL)presentOpenInMenuFromRect:(CGRect)rect
                               inView:(UIView *)view
                             animated:(BOOL)animated
此方法类似于PresentOptions MenuFromRect:inView:animated:方法,但提供的菜单仅限于能够打开当前文档的应用程序列表。此确定基于文档类型(如UTI属性所示)和已安装应用程序支持的文档类型。要支持一种或多种文档类型,应用程序必须使用CbundleDocumentTypes键在其Info.plist文件中注册这些类型

如果没有支持打开文档的注册应用程序,则文档交互控制器不会显示菜单


此方法异步显示选项菜单。当用户选择适当的选项时,文档交互控制器将自动取消菜单。您也可以使用dismissMenuAnimated:方法以编程方式解除它。

我遇到了类似的问题:

UIDocumentInteractionController.PresentPreviewInimated

完成这项工作需要相当长的时间。我发现在保存要预览的文件和显示预览之间添加一个短暂的延迟修复了问题:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(100 * NSEC_PER_MSEC)), dispatch_get_main_queue(), {
    self.controller.presentPreviewAnimated(false)
})
Swift 4.2

DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.controller.presentPreviewAnimated(false)

}

您能在这方面做些什么吗?我似乎有这个问题?不,不幸的是没有。我正在考虑在这一点上使用我的两张苹果票中的一张。这真令人沮丧。我注意到,在我的例子中,它会将整个文件的内容以十六进制转储形式写入控制台日志“Unknown activity items supplied”。这可能会增加延迟,但我不知道如何避免。嗨。谢谢你的回复。不幸的是,使用OpenIn代替Options并不能提供快速查看功能,在快速民意调查之后,这绝对是用户想要保留的功能。此外,从iOS 8开始,现在显示菜单大约需要30秒。我在苹果公司登记了一张罚单,他们信任我,并告诉我把它作为一个bug记录下来,我已经这么做了——等待回复。嘿,很高兴知道。我想为我的应用程序使用选项版本。你介意把链接粘贴到雷达上吗?谢谢嗨,它的编号是18392126——同样发布在OpenRadar上:苹果公司将我的错误报告作为副本关闭了——现在我不知道发生了什么,因为我看不到关于该副本的任何细节……你介意粘贴带有此错误的苹果公司链接吗?谢谢