我正在尝试制作一个从在线服务器下载 pdf 文件的应用程序。我所做的是创建了 3 个具有 3 个不同 URL 的按钮,并将其保存到应用程序的沙箱并在 iBooks 中打开它。
但它使应用程序崩溃,我有这个错误说......
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter' ***
这是我的代码:点击按钮:
if (sender.tag == 1) {
pdfTag = 1;
pdfSource1 = @"http://myweb.com/folder/folderagain/file1.pdf";
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:pdfSource1]];
NSURLConnection *conn = [[NSURLConnection alloc] init];
(void)[conn initWithRequest:request delegate:self];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
dataSource1 = [NSData dataWithContentsOfURL:[NSURL URLWithString:pdfSource1]];
dispatch_sync(dispatch_get_main_queue(), ^{
});
pdfSourcePath1 = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"myPDF1.pdf"];
NSLog(@"PDF path: %@",pdfSourcePath1);
[dataSource1 writeToFile:pdfSourcePath1 atomically:YES];
});
} else if (sender.tag == 2) {
pdfTag = 2;
pdfSource2 = @"http://myweb.com/folder/folderagain/file2.pdf";
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:pdfSource2]];
NSURLConnection *conn = [[NSURLConnection alloc] init];
(void)[conn initWithRequest:request delegate:self];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
dataSource2 = [NSData dataWithContentsOfURL:[NSURL URLWithString:pdfSource2]];
dispatch_sync(dispatch_get_main_queue(), ^{
});
pdfSourcePath2 = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"myPDF2.pdf"];
NSLog(@"PDF path: %@",pdfSourcePath2);
[dataSource2 writeToFile:pdfSourcePath2 atomically:YES];
});
} else if (sender.tag == 3) {
pdfTag = 3;
pdfSource3 = @"http://myweb.com/folder/folderagain/file3.pdf";
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:pdfSource3]];
NSURLConnection *conn = [[NSURLConnection alloc] init];
(void)[conn initWithRequest:request delegate:self];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{
dataSource3 = [NSData dataWithContentsOfURL:[NSURL URLWithString:pdfSource3]];
dispatch_sync(dispatch_get_main_queue(), ^{
});
pdfSourcePath3 = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"myPDF3.pdf"];
NSLog(@"PDF path: %@",pdfSourcePath3);
[dataSource3 writeToFile:pdfSourcePath3 atomically:YES];
});
}
打开文件:
if (pdfTag == 1) {
NSURL *url = [NSURL fileURLWithPath:pdfSourcePath1];
docController1 = [UIDocumentInteractionController interactionControllerWithURL:url];
docController1.delegate = self;
[docController1 presentOpenInMenuFromRect:btn1.frame inView:self.view animated:YES];
} else if (pdfTag == 2) {
NSURL *url = [NSURL fileURLWithPath:pdfSourcePath2];
docController2 = [UIDocumentInteractionController interactionControllerWithURL:url];
docController2.delegate = self;
[docController2 presentOpenInMenuFromRect:btn2.frame inView:self.view animated:YES];
} else if (pdfTag == 3) {
NSURL *url = [NSURL fileURLWithPath:pdfSourcePath3];
docController2 = [UIDocumentInteractionController interactionControllerWithURL:url];
docController2.delegate = self;
[docController2 presentOpenInMenuFromRect:btn3.frame inView:self.view animated:YES];
}
我希望我能找到答案。