我正在嘗試製作一個從在線服務器下載pdf文件的應用程序。 我做的是我創建了3個按鈕,它有3個不同的URL並將其保存到應用程序的沙箱並在iBooks中打開它。目標C:多個下載
但它崩潰的應用程序,我有這個錯誤說...
*** 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];
}
我希望我能找到答案。
據我'pdfSourcePath1,pdfSourcePath2,pdfSourcePath3'是'nil'。在塊源代碼中設置pdf源路徑之前打開文件方法。嘗試放置調試點。 –
嘗試打開文件或下載時發生錯誤嗎?你可以在建立NSURL打開之前記錄pdfSourcePath1,2,3。最後,您直接使用GCD來執行請求很奇怪,難以閱讀。查找NSURLConnection sendAsynchronousRequest:.... – danh
@Deepesh我的代碼打開文件是在connectionDidFinishLoading:(NSURLConnection *)連接 –