Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用NSURL访问本地文件_Iphone_Ios - Fatal编程技术网

Iphone 使用NSURL访问本地文件

Iphone 使用NSURL访问本地文件,iphone,ios,Iphone,Ios,我正在尝试访问resources目录中的XML文件存储。我正在使用NSURL通过NSURLConnection访问此文件(此文件将在将来交换为远程服务) 启动连接的类实现NSURLConnection方法: connection:willCacheResponse: connection:didReceiveData: connectionDidFinishLoading: connectionDidFinishLoading: 一旦我启动这个模拟器,它就会死掉,没有消息被打印到控制台上

我正在尝试访问resources目录中的XML文件存储。我正在使用NSURL通过NSURLConnection访问此文件(此文件将在将来交换为远程服务)

启动连接的类实现NSURLConnection方法:

connection:willCacheResponse: 
connection:didReceiveData: 
connectionDidFinishLoading: 
connectionDidFinishLoading:

一旦我启动这个模拟器,它就会死掉,没有消息被打印到控制台上,所以我不知道该去哪里看。有什么想法吗,或者我完全错了?

尝试从文件系统根目录加载任何内容都是错误的,错误的,错误的。在设备上肯定是错误的,在模拟器上也可能是错误的。应通过
NSBundle
类访问资源目录

例如,要获取资源中名为“Data.txt”的文件的URL,请使用以下命令:

NSURL *MyURL = [[NSBundle mainBundle]
    URLForResource: @"Data" withExtension:@"txt"];
这也将有助于:

Obj-C 斯威夫特5 希望这有帮助

你可以试试这个

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"file://localhost/Users/userName/Desktop/XMLTest.xml"]];

这里假设文件在桌面上

如果您想从路径获取URL(例如,因为您在NSTemporaryDirectory()中创建了一个文件,并且需要将该文件作为URL获取),可以使用NSURL的fileURLWithPath方法轻松实现:

NSString* tempPath = NSTemporaryDirectory();
NSString* tempFile = [tempPath stringByAppendingPathComponent:fileName];
NSURL* URL = [NSURL fileURLWithPath:tempFile];
比+URLWithString:和其他方法简单得多。

Swift 3:

    let myFileName = "somefilename"
    let myURL = Bundle.main.url(forResource: myFileName, withExtension: "png") 

同意。这是访问资源文件夹的正确方法!我在iOS上的印象是“/”访问了应用程序沙盒根目录,我很容易就大错特错了。这是我用来获取url的代码,应用程序仍然会崩溃,但这似乎是一个更明智的举动NSURL*url=[[NSBundle mainBundle]URLForResource:@“XMLTest”带扩展名:@“xml”]`在模拟器上,似乎,/表示主机根。这意味着你们将在设备和模拟器上得到完全不同的结果——不好。不管怎样,沙盒根目录与bundle resources文件夹不同。您可以通过提供更多的代码来扩展您的答案吗?我正在做以下操作,但不起作用:
NSURL*bundleResourcePath=[[NSBundle mainBundle]resourceURL]
NSURL*url=(NSURL*)[[NSBundle mainBundle]路径用于资源:@“png”类型的“SomeImage”目录:[NSString stringWithContentsOfURL:bundleResourcePath编码:NSSTRINGENCODINGCONVERSOEXTERNALREPREPRESSION错误:nil]
NSLog(@“BundlerSourcePath:%@”,BundlerSourcePath)
NSLog(@“url:%@”,url)。第一个NSLog正确显示URL,但第二个输出(null)。@cocoanob:edited。但您似乎混淆了路径和URL。这一个给出的是文件系统路径,而不是URL。我不明白为什么,但OP想从URL加载他的XML。也许是为了更方便地移植到基于网络的资源…虽然我的答案被标记为正确答案,但我相信来自Seva的答案实际上是正确的!可以更新吗?文件需要在文件夹层次结构中的什么位置才能工作?我使用文件的绝对路径,这对我很有帮助。
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"file://localhost/Users/userName/Desktop/XMLTest.xml"]];
NSString* tempPath = NSTemporaryDirectory();
NSString* tempFile = [tempPath stringByAppendingPathComponent:fileName];
NSURL* URL = [NSURL fileURLWithPath:tempFile];
    let myFileName = "somefilename"
    let myURL = Bundle.main.url(forResource: myFileName, withExtension: "png")