Ios 获取从UIPasteBoard复制的文档的文件名

Ios 获取从UIPasteBoard复制的文档的文件名,ios,uipasteboard,Ios,Uipasteboard,我正在尝试向现有的iOS应用程序添加一项功能,以便可以将邮件中“复制”的文档(比如PDF)粘贴到我的应用程序中 在邮件中查看PDF文档并从“操作”菜单中选择“复制”后,在我的应用程序代码中,当我检查: [[UIPasteboard generalPasteboard]项目] 我可以按照以下方式查看文件: { "com.adobe.pdf" = {length = 875113, bytes = 0x25504446 2d312e35 0d0a25b5 b5b5b50d ... 300d0

我正在尝试向现有的iOS应用程序添加一项功能,以便可以将邮件中“复制”的文档(比如PDF)粘贴到我的应用程序中

在邮件中查看PDF文档并从“操作”菜单中选择“复制”后,在我的应用程序代码中,当我检查:

[[UIPasteboard generalPasteboard]项目]

我可以按照以下方式查看文件:

{
    "com.adobe.pdf" = {length = 875113, bytes = 0x25504446 2d312e35 0d0a25b5 b5b5b50d ... 300d0a25 25454f46 };
}
)
并通过以下方式进一步检索:

po [[UIPasteboard generalPasteboard] valueForPasteboardType:@"com.adobe.pdf"]
<OS_dispatch_data: data[0x2820e5c00] = { leaf, size = 875113, buf = 0x1125e0000 }>
po[[UIPasteboard generalPasteboard]valueForPasteboardType:@“com.adobe.pdf”]
但是,有没有办法获取文档的名称?在Files.app中,当我粘贴同一文档时,它将被粘贴为原始文件名


我应该使用粘贴板吗?或者是否有其他API可以访问带有文件名的复制文档?

即使这个问题有点老,我也碰巧搜索了相同的问题,最终找到了解决方案。因此,供将来参考:

从iOS 11开始,
UIPasteboard
包含一个数组
itemProviders
,该数组提供有关可用对象的所有信息。这同样适用于拖放

因此,通过以下逻辑,您可以将项目保存到特定路径:

NSArray *items = [[UIPasteboard generalPasteboard] itemProviders];
for (NSInteger i = 0; i < itemProvider.count; i++) {
    NSItemProvider *itemProvider = itemProvider[i];
    NSString *identifier = itemProvider.registeredTypeIdentifiers[0];
    [itemProvider loadDataRepresentationForTypeIdentifier:identifier completionHandler:^(NSData * _Nullable data, NSError * _Nullable error) {
        NSMutableDictionary *result;
        if (!error) {
            NSString *ext = (__bridge NSString *)(UTTypeCopyPreferredTagWithClass((__bridge CFStringRef _Nonnull)(identifier), kUTTagClassFilenameExtension));
            if ([ext isEqualToString:@"jpeg"]) {
                ext = @"jpg";
            }
            NSString *mime = (__bridge NSString *)(UTTypeCopyPreferredTagWithClass((__bridge CFStringRef _Nonnull)(identifier), kUTTagClassMIMEType));
            if (!mime) {
                 mime = @"application/*";
            }
    
            NSString *filename = itemProvider.suggestedName;
            NSString *path = [folderPath stringByAppendingPathComponent:filename];
            [data writeToFile:path options:NSDataWritingAtomic error:&error];
        }
    }
}
NSArray*items=[[UIPasteboard generalPasteboard]itemProviders];
对于(NSInteger i=0;i