доступ к файлу с помощью [NSBundle mainBundle] pathForResource: ofType: inDirectory: - PullRequest
42 голосов
/ 07 июня 2011

У меня есть файл paylines.txt, добавленный в папку с именем TextFiles, которая находится в папке Resources моего проекта iOS в Xcode.

Это код, который я использую для доступа к файлу:

NSString* filePath = [[NSBundle mainBundle] pathForResource:@"paylines" ofType:@"txt" inDirectory:@"TextFiles"];
NSLog(@"\n\nthe string %@",filePath);

Код распечатывается:

2011-06-07 14:47:16.251 slots2[708:207] 

the string  (null)

Ответы [ 10 ]

163 голосов
/ 20 октября 2011

У меня тоже была такая же проблема.Решение, которое я нашел (в xcode 4.x):

Перейдите: Цель -> «Фазы сборки» -> «Копировать ресурсы комплекта» Затем добавьте этот конкретный файл сюда. Если этот файл уже добавлен, удалите его и добавьте снова.

очистите проект и ЗАПУСТИТЕ.Это работает. :)

10 голосов
/ 15 апреля 2015

Когда я перетаскиваю файлы, поле «Добавить к целям», по-видимому, не отмечено по умолчанию.Если я оставлю это без галочки, у меня будет описана проблема.Исправьте это, удалив файлы и перетащив их обратно, но отметив галочкой «Добавить к целям».enter image description here

10 голосов
/ 17 августа 2013

Попробуй, у меня все работает.

NSString *str = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"paylines.txt"];  

Для симулятора

NSURL *rtfUrl = [[NSBundle mainBundle] URLForResource:@"paylines" withExtension:@".txt"];
10 голосов
/ 27 января 2012

хорошо, я обнаружил ошибку, которую я совершал, я добавлял группу в проект вместо добавления реального каталога для более инструкций

3 голосов
/ 16 мая 2016

Все, что вам нужно сделать, это убедиться, что флажок, показанный ниже, установлен.

enter image description here

3 голосов
/ 28 мая 2014

Вы пытаетесь сделать это внутри XCTest и на грани разрушения вашего ноутбука?Это тема для вас: Почему код внутри модульных тестов не может найти ресурсы пакета?

1 голос
/ 14 июня 2016

После следования ответа @Neelam Verma или ответа @ dawid, который имеет тот же конечный результат, что и ответ @Neelam Verma, разница состоит в том, что ответ @ dawid начинается с перетаскивания файла в проект Xcode и ответа @Neelam Vermaначинается с файла, уже являющегося частью проекта XCode, я все еще не могу получить NSBundle.mainBundle().pathForResource("file-title", ofType:"type"), чтобы найти свой видеофайл.

Я подумал, может быть, потому что мой файл был в группе, вложенной в проект XCode, которыйэто было причиной, поэтому я переместил видеофайл в корень моего проекта XCode, но все равно не повезло, это был мой код:

 guard let path = NSBundle.mainBundle().pathForResource("testVid1", ofType:"mp4") else {
        print("Invalid video path")
        return
    }

Первоначально это было имя моего файла: testVid1.MP4переименование видеофайла в testVid1.mp4 устранило мою проблему, поэтому, по крайней мере, строковый аргумент ofType чувствителен к регистру.

1 голос
/ 25 марта 2014

В случае Mac OSX,

Перейти к целям -> Фазы сборки нажмите +, чтобы скопировать новые фазы сборки файлов Выберите каталог продукта и поместите туда файл.

Очистите и запустите проект.

1 голос
/ 09 декабря 2013

Перейдите в «Цель» -> «Фазы сборки», выберите свою цель, выберите вкладку «Фазы сборки», нажмите «Добавить фазу сборки» и выберите «Добавить файлы копирования».Измените пункт назначения на «Каталог продуктов».Перетащите файл в раздел «Добавить файлы».

0 голосов
/ 28 февраля 2014

Выберите проект / определенную папку -> Щелкните правой кнопкой мыши -> Добавить файлы в проект -> выберите файл, который хотите добавить.

Это сработало для меня.

...