【问题标题】:Crash when trying to open downloaded pdf in new view尝试在新视图中打开下载的 pdf 时崩溃
【发布时间】:2013-04-09 15:22:13
【问题描述】:

我的应用程序会下载一个 pdf,然后按下按钮将其显示在新视图中。

我得到错误:

-[NSURL initFileURLWithPath:]: nil string parameter'

经过一些故障排除后,我将问题固定在此代码 sn-p 中的某个位置。指向的路径位于下载的 pdf 所在的 /Documents 文件夹中。因此该文档不在主包中。

NSString *path = [[NSBundle mainBundle] pathForResource:PDFpathwithextension ofType:@"pdf"];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

这里是下载代码:

//Start an NSURL connection to download from the remotepath
  NSData *pdfData = [[NSData alloc] initWithContentsOfURL:remotepathURL];

//Store the Data locally as PDF File
  NSString *resourceDocPath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle]  resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"]];

  NSString *filePath = [resourceDocPath stringByAppendingPathComponent:[newdata.ThirdPickerName stringByAppendingFormat:@".pdf"]];
  pdfData writeToFile:filePath atomically:YES];

【问题讨论】:

  • 从技术上讲,您在这里看到了一个异常,这会导致崩溃

标签: path nsurl


【解决方案1】:

正如NSURL 告诉你的那样,你把它交给了nil,而不是一个有效的路径。

nil 在这里表示找不到该名称的此类资源。确实,您的问题表明您很清楚这一点。

既然您声称您的应用程序已经下载了 PDF,它是否真的将其写入磁盘?如果是这样,您应该知道生成文件的位置。如果没有,你首先需要编写实际的下载代码!

【讨论】:

  • 你应该直接使用NSURLConnection以避免阻塞任何线程(尤其是主线程)。还避免了一次将整个文件放在内存中
  • 您决定将文件放在何处的代码非常可疑。请改用-[NSFileManager URLForDirectory:inDomain:appropriateForURL:create:error:]
  • 最后,当尝试一些可能失败的事情(即写入文件)时,测试它是否成功!它会在某个时候失败,你需要优雅地处理它。如今,大多数 Cocoa 方法都有一个变体,可以返回 NSError 以获取问题的完整详细信息。
  • 所以我切换到 NSURLConnection 并让该部分正常工作,切换了文件放置技术,我确认文件保存位置与 pdf 查看器正在查看的位置相同。现在 UIwebview 将加载而不会崩溃,但什么也不显示,它只是空白。继续下一个问题:)谢谢,迈克。
猜你喜欢
  • 1970-01-01
  • 2014-04-20
  • 2022-11-15
  • 1970-01-01
  • 2017-12-26
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多