проблема с чтением файлов в приложении iphone! - PullRequest
0 голосов
/ 24 августа 2010

Я читаю файл в приложении iphone.Работает нормально.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSLog(@"%@",documentsDirectory);
    NSString *fileName = [NSString stringWithFormat:@"%@/test.txt",documentsDirectory];
    NSLog(@"%@",fileName);
    NSString *content = [[NSString alloc] initWithContentsOfFile:fileName
                                                    usedEncoding:nil
                                                           error:nil];
    NSLog (@"%@",content);
}

работает хорошо, когда я использую имя файла как test.txt

Но когда я добавляю другой файл в ресурс, предположим, что test1.txt тогда NSLog(@"%@",documentsDirectory) и NSLog(@"%@",fileName) показывает правильный результат.Но

NSLog (@"%@",content); печатает null в log.Так в чем же причина?

Я печатаю ошибку детали, и она печатает

NSFilePath = "/Users/sam-xxx/Library/Application Support/iPhone Simulator/3.2/Applications/51197946-6042-4A90-AA39-F07F8A649308/Documents/test1.txt";
    NSUnderlyingError = Error Domain=NSPOSIXErrorDomain Code=2 "Operation could not be completed. No such file or directory";

Ответы [ 3 ]

4 голосов
/ 24 августа 2010

Было бы лучше проверить, вернулась ли ошибка:

NSError *error;
NSString *content = [[NSString alloc] initWithContentsOfFile:fileName
                                                usedEncoding:nil
                                                       error: &error];
if (error) NSLog(@"Error !: %@", [error localizedDescription]);

Это (надеюсь) даст вам ключ к пониманию того, что происходит.

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

Документы для NSBundle находятся здесь: Документация NSBundle

У вас есть 2 варианта, который вы предлагаете:

NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:fileName];

Который вернет каталог ресурсов Bundle с именем файла, добавленным к этому пути.

Лично я предпочитаю pathForResource: ofType: метод:

NSString *filename = [[NSBundle mainBundle] pathForResource: @"test1" ofType: @"txt"];

Поскольку это не только скажет вам, существует ли файл (возвращает nil, если его нет), но также будет искать каталоги локализации, если они у вас есть.

0 голосов
/ 26 августа 2010

Когда вы запускаете приложение в Simulator, вы можете скопировать и вставить нужный файл в каталог документов приложения, используя Finder, но на iPhone или iTouch как вы можете вставить файл в каталог документов.

* 1002есть только 2 способа поместить что-то в каталог документов, когда приложение работает на iPhone или iTouch.
  1. Создать.
  2. Скопировать один из комплекта.1010 * в вашем коде вы читаете файл в каталоге Documents, вы можете вставить файл в каталог вручную, используя Finder.Попробуйте это.
    NSString *path = [[NSBundle mainBundle] pathForResource:@"test.txt" ofType:nil];
    NSString *content = [[NSString alloc] initWithContentsOfFile:path
                                                    usedEncoding:nil
                                                           error:nil];
    NSLog (@"%@",content);
    
0 голосов
/ 24 августа 2010

Вы проверили, существует ли файл в сообщении об ошибке? При запуске в симуляторе вы можете просто открыть Finder, нажать cmd + shift + g и вставить каталог в файл.

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

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