Путь contentOfFile дает null

Я пытаюсь получить весь текст из txt-файла в строку, но если я попытаюсь NSlog() эту строку, я получаю ноль. Я думаю, это из-за пути, по которому я пытаюсь получить файл, но я не могу понять, что не так с путем. Я знаю, что получаю правильный navigationItem.title, так что это не проблема. Текстовый файл находится в основном пакете в подпапке с именем Øvelser/Text/"nameOfExercise".txt. Я вставил свой код ниже:

- (void)viewDidLoad
{
[super viewDidLoad];

//Read from the exercise document
NSString *path = [[@"Øvelser/Text/" stringByAppendingString:self.navigationItem.title] stringByAppendingString:@".txt"];

if(path)
{

    _exerciseDocument = [NSString stringWithContentsOfFile:path encoding: NSUTF8StringEncoding error:nil];
    NSLog(@"%@", _exerciseDocument);
}
else 
{
    NSLog(@"error");
}
}

person Niels Sønderbæk    schedule 02.04.2012    source источник


Ответы (2)


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

NSBundle *thisBundle = [NSBundle bundleForClass:[self class]];
NSString *filePath = nil;

if (filePath = [thisBundle pathForResource:@"Data" ofType:@"txt" inDirectory:@"Folder1"])  {

    theContents = [[NSString alloc] initWithContentsOfFile:filePath];

    // when completed, it is the developer's responsibility to release theContents
person trojanfoe    schedule 02.04.2012

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

NSError* error = nil;
 _exerciseDocument = [NSString stringWithContentsOfFile: path 
                                               encoding: NSUTF8StringEncoding  
                                                  error: &error];
if (_exerciseDocument == nil)
{
     NSLog(@"Error: %@", error);
}
else
{
     // success
} 

NSString имеет множество прекрасных методов для управления путями, и вы должны их использовать. В частности, создайте свои пути, используя stringByAppendingPAthComponents и stringByAppendingPathExtension.

person JeremyP    schedule 02.04.2012