Я почти уверен, что это то, что нужно сделать классу NSError - дать подробную информацию об ошибках. Наиболее распространенный шаблон, который вы увидите, - это метод, который получает указатель на объект NSError, например:
- (id)doSomethingWithArgument:(id)arg error:(NSError **)error
Метод возвращает некоторое значение (или, возможно, nil
) для результата выполнения чего-либо, но если вызов не удался, объект NSError поместит указатель, переданный с деталями об ошибке. Ваша документация отвечает за указание того, что возвращается, если метод действительно обнаружил ошибку.
Другой метод, который приходит на ум, - это блок @throw
- @catch
; однако в Objective-C @throw
исключение может быть довольно дорогим в вычислительном отношении, и обычно это рекомендуется делать только в действительно исключительных ситуациях.
Редактировать: Ух, оказывается, у многих действительно сильные мнения по поводу @throw
исключений. Подводя итог (весьма полезный) комментарий по этому вопросу:
- Создание исключений чаще всего связано с ошибкой программиста (ситуации, которые никогда не произойдут и т. П.); исключения не следует использовать для обычной обработки ошибок. Вместо этого используйте метод
error
, показанный выше, или отправьте экземпляры NSNotification.
- Если вы все же широко используете блоки
@throw
/ @catch
, будьте очень осторожны с логикой, окружающей их. Objective-C предоставляет множество способов отсоединить методы для запуска в других потоках или отложить выполнение и т. Д. Будьте очень внимательны, чтобы учесть все эти возможности при написании кода.
Наконец, еще один очень верный пункт:
- Если вы используете объект
error
, переданный методу, возвращаемое значение должно указывать его. Не пытайтесь сделать оба (возвратите частично действительный объект и установите объект error
).