iOS 6 中的文件路径给了我 null
Posted
技术标签:
【中文标题】iOS 6 中的文件路径给了我 null【英文标题】:file path in iOS 6 gives me null 【发布时间】:2012-10-27 17:45:58 【问题描述】:我正在使用 iPhone6 模拟器,我正在尝试使用以下任何代码获取文件(html 的任何扩展名 pdf):
NSString *file = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%@.pdf", documentName] ofType:nil];
或
NSString *file2 = [[NSBundle mainBundle] pathForResource:documentName ofType:@"pdf"];
我确定文件存在于 Resources 文件夹中并且我没有添加该文件,我以编程方式从 Web 下载它并在此路径中查看它 ( /Users/myMac/Library/Application Support/iPhone Simulator/6.9/Applications/E60F22DD-7301-48EF-AB25-B9D42FA6AD49/myApp.app) 我看到了文件,但代码没有看到它
但这些代码有时会给我 null,而其他时候给我文件。
为什么会发生这种情况以及如何防止这种情况并使其始终为我提供文件。 考虑到我使用
if(file != nil)
并且想让 if file == nil 尝试使用任何方式打开它。
提前致谢。
【问题讨论】:
【参考方案1】:确保您的文件已添加到项目的目标中。选择您的目标,然后选择 Build Phases->Copy Bundle Resources。该文件应该在那里。
有时值得清理您的项目并从头开始构建。我见过在执行清理之前添加的文件没有复制到模拟器/设备的情况。
【讨论】:
感谢您的回答,但我并没有将文件完全复制到我的资源中,文件是通过代码从网络下载到资源的,我想在检查 / 中的资源时打开它Users/myMac/Library/Application Support/iPhone Simulator/6.9/Applications/E60F22DD-7301-48EF-AB25-B9D42FA6AD49/myApp.app 我看到了文件,但是代码看不到它 对不起,我不明白,你在应用程序中下载它?如果是,那么您只能将其放在应用程序的 Documents 文件夹中。在这种情况下,您应该使用类似NSString* filePath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/%@.pdf", documentName]];
的东西来获取正确的路径,因为您的文件不会在应用程序的主包中。
我使用此代码 NSString *pdfPath = [NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] bundlePath] ,[NSString stringWithFormat:@"%@.pdf",documentName]];
[data writeToFile:pdfPath atomically:YES];
在 mainBundle 中下载了它,并尝试通过相关代码获取它。我写了 Nslog 以确保它获取文件路径,有时它会打印路径,有时不打印它。 :S
您甚至不应该尝试在此路径中放置任何内容,您的应用下载的所有内容都应该放在 Documents 文件夹中。
但是如果我使用 Documents 文件夹,任何人都可以看到我项目中的文件吗?我的意思是我不希望任何人轻易地从我的项目中获取 pdf 文件。抱歉,我是 iPhone 新手。【参考方案2】:
a) 如果您从 Web 下载任何内容,则内容会转到您应用程序的文档目录。
b) 没有其他应用程序可以与您的应用程序文档目录进行交互。
c) Bundle 路径,即应用程序的组和文件部分是只读的。
d) 除非您允许访问您的应用程序的文档目录,否则任何人都不能偷偷您的应用程序 PDF。
希望对你有帮助
【讨论】:
以上是关于iOS 6 中的文件路径给了我 null的主要内容,如果未能解决你的问题,请参考以下文章