使用NSURL访问本地文件

时间:2011-02-10 17:16:02

标签: iphone ios

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

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL 
URLWithString:@"file:///XMLTest.xml"] 
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
if (connection) {
    // Create the NSMutableData to hold the received data.
    // receivedData is an instance variable declared elsewhere.
    response = [[NSMutableData data] retain];
} else {
    NSLog(@"Could not create connection");
}

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

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

一旦我启动它,模拟器就会死掉,没有消息打印到控制台,所以我不知道在哪里看。任何想法,或者我只是这样做完全错了?

5 个答案:

答案 0 :(得分:156)

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

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

NSURL *MyURL = [[NSBundle mainBundle]
    URLForResource: @"Data" withExtension:@"txt"];

答案 1 :(得分:31)

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

NSString* tempPath = NSTemporaryDirectory();
NSString* tempFile = [tempPath stringByAppendingPathComponent:fileName];
NSURL* URL = [NSURL fileURLWithPath:tempFile];

比+ URLWithString:和其他方法容易得多。

答案 2 :(得分:19)

这也有效:

NSString *path = [[NSBundle mainBundle] pathForResource:@"XMLTest" ofType:@"xml"];

希望这有帮助!

答案 3 :(得分:2)

你可以试试这个

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

这里假设文件在桌面上。

答案 4 :(得分:2)

斯威夫特3:

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