Данные всегда равны нулю, не знаю почему

NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp4"];

NSLog(@"Path: %@", path);

NSURL *url = [NSURL URLWithString:path];

NSLog(@"URL: %@", url);

NSData *data = [NSData dataWithContentsOfURL:url];

NSLog(@"Data exists? %@", data ? @"yes" : @"no");

test.mp4 находится в моем комплекте, но это всегда результат

2013-03-13 11:50:29.444 videoAppPrototype[28625:907] Path: /var/mobile/Applications/D66DD820-4DE1-4E45-9495-9BACF130E368/videoAppPrototype.app/test.mp4
2013-03-13 11:50:29.446 videoAppPrototype[28625:907] URL: /var/mobile/Applications/D66DD820-4DE1-4E45-9495-9BACF130E368/videoAppPrototype.app/test.mp4
2013-03-13 11:50:29.448 videoAppPrototype[28625:907] Data exists? no

Не знаю почему, но данных никогда не существует.


person HighFlyingFantasy    schedule 13.03.2013    source источник
comment
И вы уверены, что test.mp4 существует в комплекте приложений?   -  person trojanfoe    schedule 13.03.2013
comment
возможный дубликат URLWithString возвращает ноль для пути к ресурсу - iphone   -  person trojanfoe    schedule 13.03.2013


Ответы (1)


Вы получаете путь к файлу, а затем используете его для URL-адреса. Вы либо хотите получить URL-адрес, либо использовать URL-адрес:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"mp4"];
NSData *data = [NSData dataWithContentsOfURL:url];

Или вы хотите получить путь и использовать путь:

NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp4"];
NSData *data = [NSData dataWithContentsOfFile:path];

Как указывает bgoers, если у вас есть путь и вам нужен URL-адрес файла, вы можете использовать fileURLWithPath, хотя я бы предпочел использовать один из двух вышеупомянутых методов. В любом случае, чтобы использовать fileURLWithPath, это выглядит следующим образом:

NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"mp4"];
NSURL *url = [NSURL fileURLWithPath:path];
NSData *data = [NSData dataWithContentsOfURL:url];
person Rob    schedule 13.03.2013
comment
Вы можете объяснить, почему это не удалось? URL-адрес выглядит правильным. - person trojanfoe; 13.03.2013
comment
Короче говоря, вы не можете очень хорошо смешивать URL-адреса и пути к файлам в iOS :) - person anon_dev1234; 13.03.2013
comment
Я считаю, что он мог бы также использовать [NSURL fileURLWithPath:path] для перехода по URL-маршруту. Но лучше всего использовать один из двух вышеперечисленных методов. - person anon_dev1234; 13.03.2013
comment
@trojanfoe URL-адрес из URLForResource начинается с file://localhost/, за которым следует путь. Когда вы просто извлекаете путь, вы его упускаете. Результат pathForResource не является допустимой строкой URL. - person Rob; 13.03.2013
comment
Похоже, вы правы, но я нахожу удивительным, что dataWithContentsOfURL не принимает file: схему, если она отсутствует. См. stackoverflow.com/questions/ 2112927 / - person trojanfoe; 13.03.2013
comment
@ Роберт Да, я знаю; вот почему этот вопрос - обман. - person trojanfoe; 13.03.2013