Я работаю над новой функцией для существующего приложения iPhone и хотел бы создать несколько новых каталогов в локальной папке «Документы» приложения. Я успешно сделал это с помощью рекомендованного метода:Неверное возвращаемое значение с использованием NSFileManager createDirectoryAtPath:
[NSFileManager createDirectoryAtPath:withIntermediateDirectories:attributes:error:]
При чтении документации по этому методу, я был заинтригован возвращаемые значения, перечисленные в официальном documentation Apple:
Возвращаемое значение: ДА, если операция прошла успешно или уже существует, в противном случае NO
Каждый раз, когда мое приложение запускается, я хотел бы чтобы убедиться, что каталоги правильно установлены. Я подумал, что разумным способом сделать это будет вызов метода createDirectory: при каждом запуске и использование возвращаемого значения метода. Если по какой-либо причине каталог отсутствовал, он будет создан. Если каталог уже был на месте, возвращаемое значение все равно будет YES. A NO Возвращаемое значение затем может использоваться как флаг для дополнительной логики восстановления/восстановления.
К сожалению, я, кажется, получаю результаты, не соответствующие документации Apple. Метод возвращает NO, если каталог уже существует - когда документы Apple говорят, что он должен вернуть ДА в этом случае.
Следующая программа демонстрирует это поведение:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSFileManager * fm = [NSFileManager defaultManager];
bool testDirectoryCreated = NO;
testDirectoryCreated = [[NSFileManager defaultManager]createDirectoryAtPath: [NSString stringWithFormat:@"%@/%@",[fm currentDirectoryPath],@"TestDirectory"]
withIntermediateDirectories: NO
attributes: nil
error: NULL];
NSLog(@"TestDirectory Created: %@\n", (testDirectoryCreated ? @"YES" : @"NO"));
testDirectoryCreated = [[NSFileManager defaultManager]createDirectoryAtPath: [NSString stringWithFormat:@"%@/%@",[fm currentDirectoryPath],@"TestDirectory"]
withIntermediateDirectories: NO
attributes: nil
error: NULL];
NSLog(@"TestDirectory Created: %@\n", (testDirectoryCreated ? @"YES" : @"NO"));
[pool drain];
return 0;
}
Когда программа выполняется, она будет печатать ДА на первом createDirectory: вызов, а НЕТ на второй вызов - когда «TestDirectory» уже существует.
Это ошибка в документации Apple, или я что-то упускаю?
Кроме того, любые другие идеи только для проверки целостности моей структуры каталогов? Есть ли простой метод «directory exists», который я могу назвать?
Спасибо,
Том
Нечетный, моя документация гласит: «Если ДА, этот метод создает любые несуществующие родительские каталоги как часть создания каталога в URL-адресе. Если НЕТ, этот метод терпит неудачу, если какой-либо из промежуточных родительских каталогов не существует. если какой-либо из промежуточных элементов пути соответствует файлу, а не каталогу ». - Заставляет меня думать, что это формулировка от createDirectoryAtURL: - отличается ли поведение? – GTAE86