I am trying to make an app that downloads a pdf file from an online server. What I did was I created 3 buttons that has 3 different URLs and save it to the app's sandbox and open it in iBooks.
But it crashes the app and I am having this error saying...
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:]: nil string parameter' ***
Here's my code: On Button Click:
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];
});
}
For opening the file:
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];
}
I hope I could find answer.