Чтение текстового файла в Objective C - PullRequest
0 голосов
/ 20 октября 2011

Я посмотрел на сайте несколько других проблем, похожих на эту, но не нашел ничего, что помогло бы решить эту проблему ... Поэтому я пытаюсь прочитать текстовый файл, который находится в том же каталоге, что и моя основная программа, и ятакже импортировал его в сам проект, ниже приведен код с его выводом, любые предложения приветствуются, спасибо!

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"allshows" 
                                    ofType:@"txt"];
NSLog(@"filePath: %@", filePath);

NSString *fileString = [NSString stringWithContentsOfFile:filePath];
NSLog(@"fileString: %@", fileString);

NSArray *lines = [fileString componentsSeparatedByString:@"\n"];  
NSLog(@"arrayLines: %@", lines);

и вывод выглядит так:

filePath: (null)
fileString: (null)
arrayLines: (null)

как я уже упоминал, файл "allshows.txt" находится в том же каталоге, что и "Epguides.m" (основной каталог).

Есть идеи, что мне не хватает?Это моя первая настоящая попытка программы в Objective C, если это не было очевидно lol

Спасибо!

РЕШЕНО - СПАСИБО ЗА ВАШИ УСИЛИЯ.

Ответы [ 4 ]

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

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

NSString *path = [[NSBundle mainBundle] bundlePath]; 
NSString *xmlPath = [path stringByAppendingPathComponent:@"periodic.xml"]; 
NSString *xmlString = [NSString stringWithContentsOfFile:xmlPath encoding:NSUTF8StringEncoding error:nil]; 

он загружает XML, но в любом случае это просто текст, еслиработа для вас

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

как я уже говорил, файл "allshows.txt" находится в том же каталоге, что и "Epguides.m" (основной каталог).

Когда вы говорите «основной каталог», вы имеете в виду пакет приложения или каталог, в котором он компилируется?

Это .m заставляет меня поверить в последнее, и в этом случае вы неправильно используете NSBundle. NSBundle найдет файлы, расположенные в вашем комплекте приложений, а не файлы в каталоге компиляции.

Чтобы добавить что-то в пакет приложений, выполните следующие действия. 1. Перетащите элемент в проект Xcode (в данном случае allshows.txt) внутри каталога группы «Вспомогательные файлы» (вам не нужно добавлять его туда, но вы также можете его добавить). 2. Выберите свой проект слева и перейдите на вкладку Фазы сборки. 3. Если вашего файла еще нет в разделе «Копировать ресурсы комплекта», просто добавьте его, перетаскивая его.

После этого вы сможете выполнить то, что пытаетесь сделать.

PS. Если я ошибся в своем предположении о директории компиляции против пакета приложения. Попробуйте передать @ "" ofType :, тип является просто подсказкой NSBundle для более быстрого поиска.

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

Причина, по которой вы получаете null от вызова pathForResource, заключается в том, что в пакете нет файла, соответствующего этому имени.

Просто потому, что он находится в файловой системе рядом с вашими исходными файлами., не означает, что он будет скопирован в комплект .app.

Проверьте шаг «Копировать ресурсы комплекта» в настройках сборки целевой системы и убедитесь, что файл указан там.

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

Убедитесь, что вы включили этот файл в свою цель.Просто иметь это в программе недостаточно.В частности, на этапах сборки этого целевого объекта убедитесь, что он скопирован в выходной каталог, который может не совпадать с тем, из которого, как вы думаете, вы выполняете.(Обычная ошибка людей - смотреть, где находится их проект, или в папке bin релиза вместо отладки, или наоборот. (... и если вы добавите его к шагу, убедитесь, что вы знаетечто он перезаписывается при каждой компиляции и сборке.)

...