Доступ к локальному файлу с помощью NSURL - PullRequest
48 голосов
/ 10 февраля 2011

Я пытаюсь получить доступ к хранилищу файлов 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 ]

156 голосов
/ 10 февраля 2011

Попытка загрузить что-либо из файловой системы root неправильно, неправильно, неправильно. Определенно неправильно на устройстве, и, вероятно, неправильно на симуляторе. Каталог ресурсов должен быть доступен через класс NSBundle.

Например, чтобы получить URL-адрес для файла с именем «Data.txt» в ресурсах, используйте следующее:

NSURL *MyURL = [[NSBundle mainBundle]
    URLForResource: @"Data" withExtension:@"txt"];
31 голосов
/ 17 марта 2013

Если вы хотите получить URL-адрес из пути (скажем, потому что вы создали файл в NSTeilitaryDirectory () и вам нужно получить его как URL-адрес), вы можете легко сделать это, используя NSURL fileURLWithPath метод:

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

Гораздо проще, чем + URLWithString: и другие методы.

19 голосов
/ 10 февраля 2011

Это также будет работать:

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

Надеюсь, это поможет!

2 голосов
/ 13 июня 2017

Swift 3:

    let myFileName = "somefilename"
    let myURL = Bundle.main.url(forResource: myFileName, withExtension: "png") 
2 голосов
/ 08 марта 2011

Вы можете попробовать это

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

здесь при условии, что файл находится на рабочем столе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...