我正在尝试访问资源目录中的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:
一旦我启动它,模拟器就会死掉,没有消息打印到控制台,所以我不知道在哪里看。任何想法,或者我只是这样做完全错了?
答案 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")