Передача NULL
означает следующее:
BOOL itemRemoved = [[NSFileManager defaultManager] removeItemAtPath:fullPath
error:NULL];
, т.е. параметр error
равен NULL
. Внутри -removeItemAtPath:error:
видит, был ли передан действительный указатель. Если это NULL
, он просто не сообщит об ошибке как экземпляр NSError
- но возвращаемое значение будет указывать, завершился ли метод успешно.
Кроме того, ваш тест неверен. Не следует использовать выходной параметр error
, чтобы определить, произошла ли ошибка, потому что она может быть установлена , даже если метод завершается успешно . Вместо этого вы должны использовать возвращаемое значение метода для обнаружения ошибок. Если возвращаемое значение (в данном конкретном случае) NO
, используйте выходной параметр error
, чтобы получить информацию об ошибке:
NSError *error = nil;
BOOL itemRemoved = [[NSFileManager defaultManager] removeItemAtPath:fullPath error:&error];
if (itemRemoved == NO) {
DLogErr(@"Unable to remove file: error %@, %@", error, [error userInfo]);
return;
}
Цитирование Руководство по программированию обработки ошибок ,
Важно: Успешность или неудача указывается возвращаемым значением метода. Хотя методы Какао, которые косвенно возвращают объекты ошибок в домене ошибок Какао, гарантированно возвращают такие объекты, если метод указывает на сбой, напрямую возвращая ноль или НЕТ, вы всегда должны проверять, чтобы возвращаемое значение было ноль или НЕТ, прежде чем пытаться что-либо делать с NSError object.
Редактировать : Как указал NSGod, -removeItemAtPath:error:
возвращает BOOL
, а не NSDictionary *
. Я отредактировал свой ответ, чтобы отразить это.