NSSearchPathForDirectoriesInDomains NSUserDomainMask

Используя URLConnection, я загружаю файл с URL и сохраняю эти данные в файл в каталоге документов. Когда я получаю ответ, когда вызывается метод didReceiveResponse:, я создаю файл и перемещаюсь в конец этого файла следующим образом:

NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:self.fileName];
NSLog(@"filepath is %@",filePath);
[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil];
file = [[NSFileHandle fileHandleForUpdatingAtPath:filePath] retain];
[file seekToEndOfFile];

где File является объектом класса NSFileHandle. Позже, при получении данных, всякий раз, когда вызывается метод данных didReceiveData:(NSData *), я сохраняю полученные данные в файл следующим образом:

[file seekToEndOfFile];
[file writeData:data];

Наконец, я закрываю файл в connectionDidFinishLoading: метод следующим образом:

[file closeFile];

Это работало, когда я собирал и работал в моей системе. Но когда я скопировал в другую систему и попытался собрать, я получил эту ошибку:

Terminating app due to uncaught exception `'NSFileHandleOperationException'`, reason: '*** `-[NSConcreteFileHandle seekToEndOfFile]: No such file or directory'`

Я ссылался на http://www.techotopia.com/index.php/Working_with_Directories_on_iPhone_OS и что такое NSSearchPathForDirectoriesInDomains? для того, чтобы знать о функции NSSearchPathForDirectoriesInDomain, но мне все еще не ясно.

Будет UserDomainMask верните правильный путь в зависимости от системы и пользователя, в котором существует проект. Если так, то почему я получаю такую ​​ошибку?

Они говорят, что возвращенный путь (сохраненный в filepath) будет путь / Пользователи // Библиотека / Поддержка приложений /iPhone Simulator/ Пользователь / Приложение // Документы, где

имя пользователя, в данный момент вошедшего в систему Mac OS X, на которой запущен симулятор, и уникальный идентификатор приложения

Может ли кто-нибудь помочь мне, чтобы понять, почему я получаю такую ​​ошибку.

2 ответа

Решение

Так как по вашему требованию нет исходного кода, и вы показываете исключение, у нас есть эти пути для записи и чтения. и поделитесь тем, что вы используете?

документы

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

Библиотека

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];

каталог кеша

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
BOOL isDir = NO;
NSError *error;
if (! [[NSFileManager defaultManager] fileExistsAtPath:cachePath isDirectory:&isDir] && isDir == NO) {
    [[NSFileManager defaultManager] createDirectoryAtPath:cachePath withIntermediateDirectories:NO attributes:nil error:&error];
}

Для чтения и записи вы можете использовать путь.

-(NSString *) filePath
{

    NSArray *paths = NSSearchPathForDirectoriesInDomains(

                                                         NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDir = [paths objectAtIndex:0];
    NSLog(@"documentsDir %@",documentsDir);

    return [documentsDir stringByAppendingPathComponent:@"xxxxx.sql"];
}
Другие вопросы по тегам