2009-12-07 3 views
19

В любом случае, чтобы получить более подробные данные об ошибках с «createFileAtPath», я как будто ожидал NSError? В настоящее время я использую возвращаемое значение BOOL.Более подробная ошибка от createFileAtPath?

success = [fileMan createFileAtPath:fileOnDisk contents:dBuffer attributes:nil]; 
if(success == YES) NSLog(@"FileCreated"); 
else { 
    NSLog(@"ERROR: Failed to create file"); 
    return 1; 
} 

Гэри

ответ

54

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

Ошибки, возвращаемые в этом случае, обычно являются одной из ошибок POSIX, заявленных в errno.h (errno автоматически включается для вас как часть заголовков Cocoa или Foundation).

Чтобы увидеть ошибку, используйте функцию strerror от errno.h и ссылаться на глобальный errno целое число, которое установлено на POSIX низкого уровня Io функций, когда возникает проблема:

if (![fm createFileAtPath:@"/etc/foobar.txt" contents:data attributes:nil]) 
{ 
    NSLog(@"Error was code: %d - message: %s", errno, strerror(errno)); 
} 

// output will be: Error was code: 13 - message: Permission denied 

Список кода ошибки константы перечислены в файле Error Handling Programming Guide for Cocoa (в дополнение к самому заголовку errno.h).

+0

Perfect, большое спасибо ... – fuzzygoat

+0

Этот ответ огромен. Умная! –

9

Вы не должны использовать этот метод; они забыли поместить это в главные документы (!), но если вы прочтете заголовочный файл Apple, вы найдете этот комментарий:

/* Эти методы приведены здесь для обеспечения совместимости. Соответствующие методы NSData, которые возвращают NSErrors, следует рассматривать как основной способ создания файла из NSData или получения содержимого файла в виде NSData. */

Таким образом, вместо того, Apple рассчитывает использовать этот (который, от тестирования, по-видимому, функционирует точно так же - за исключением того, что он находится в странном классе, где вы никогда не думали искать его (Я хочу, чтобы создать пустой файл ... так что я должен ... создать экземпляр объекта ноль NSData что) имеет объект NSError):?

https://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSData_Class/Reference/Reference.html#//apple_ref/occ/instm/NSData/writeToFile:options:error:

Смежные вопросы