Более подробная ошибка из createFileAtPath? - PullRequest
19 голосов
/ 07 декабря 2009

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

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

* 1004 Гэри *

Ответы [ 2 ]

54 голосов
/ 07 декабря 2009

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

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

Чтобы увидеть ошибку, используйте функцию 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

Список констант кодов ошибок приведен в Руководстве по программированию обработки ошибок для какао (в дополнение к самому заголовку errno.h).

9 голосов
/ 23 августа 2013

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

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

Таким образом, вместо этого Apple ожидает, что вы будете использовать это (которое, как показало тестирование, функционирует точно так же - за исключением того, что оно находится в странном классе, где вы никогда не подумаете искать его (я хочу создать пустой файл ... так что я должен ... создать экземпляр объекта nD 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:

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