UIPasteboard不适用于PDF文件

时间:2018-08-02 11:23:06

标签: ios objective-c uipasteboard

我有两个应用程序,我正在尝试将PDF文件从一个传递到另一个。

我们将把两个应用程序视为App1和App2。我正在从App1中打开App2。

所以我已经在App2的信息列表中配置了URLType。

在App1中单击“打开App2”按钮时,我正在创建一个粘贴板,并为其分配一个pdf文件,该pdf文件位于项目目录中,如下所示:

在App1'openApp2'操作方法中:

//pdf copying to pasteboard
NSString *pdfPath = [[NSBundle mainBundle] pathForResource:@"thenativescriptbook" ofType:@"pdf"];

NSURL *pdfURL = [NSURL fileURLWithPath:pdfPath];

NSData *data = [NSData dataWithContentsOfURL:pdfURL];

[[UIPasteboard generalPasteboard] setData:data forPasteboardType:(NSString *)kUTTypePDF];

//code to launch app2
NSString *customAppURL = @"Example://";
NSMutableDictionary *options;

[[UIApplication sharedApplication] openURL:[NSURL 
URLWithString:customAppURL] options:options completionHandler:^(BOOL 
success) {
    NSLog(@"**************Launch Success*************");
}];

它正在启动App2。

现在我正尝试从App2的粘贴板中获取PDF文件,如下所示:

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSData *data = [pasteboard dataForPasteboardType:(NSString *)kUTTypePDF];
NSURL *pdfURL = [NSURL URLWithDataRepresentation:data relativeToURL:nil];
self.pdfPath = [pdfURL path];
NSLog(@"PATH: %@",self.pdfPath);

但是它给出了我无法在任何PDF阅读器中打开的错误消息。

1 个答案:

答案 0 :(得分:1)

当您尝试重新加载PDF文件时,问题似乎出在您的App2中。首次在App1中设置数据时,您将检索PDF文件的数据,并将此数据放置在粘贴板上。

然后在App2中,您检索PDF的数据,但是您没有尝试将其保存到新文件中,而是尝试从PDF数据创建URL,并且...失败了。

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSData *data = [pasteboard dataForPasteboardType:(NSString *)kUTTypePDF];

到目前为止,该部分仍然有效,但随后...

NSURL *pdfURL = [NSURL URLWithDataRepresentation:data relativeToURL:nil];
self.pdfPath = [pdfURL path];
NSLog(@"PATH: %@",self.pdfPath);

您尝试从检索的PDF数据中创建URL。这是有关如何创建文件的粗略示例:

NSString *cachesFolder = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
NSString *file = [cachesFolder stringByAppendingPathComponent:@"testfile.pdf"];    
[data writeToFile:file options:NSDataWritingAtomic error:nil];