Хотя я согласен с тем, что вы не должны подкласса NSError
, очень полезно размещать на нем категории, и я делаю это регулярно. Например, скажем, ваша система часто отправляет ошибки, которые поступают из некоторого блока JSON. Я нахожу это очень удобно для создания категории, как:
@interface NSError (MyErrors)
// Construct an NSError from data in JSON.
// Include full JSON response in the userInfo
+ (NSError *)myErrorWithJSON:(JSON *)json;
// Parse the text out of the user info
- (NSString *)myErrorMessage;
// The full JSON error block as a string
- (NSString *)myErrorJSON;
// BOOLs can be helpful sometimes, or you could return an enum for use in a switch.
- (BOOL)myIsNetworkError;
- (BOOL)myIsAuthError;
@end
Я часто пишу маленькие помощники, чтобы построить более NSError
просто, построит UserInfo так, как я хочу, и тянуть данные обратно из UserInfo без звонящих необходимо знать его внутреннее представление. Я считаю, что это очень хорошая форма скрытия данных и поощряет использование более описательных сообщений.
Аналогичным образом, даже для небольших проектов, я часто создаю метод категории +myErrorWithCode:localizedDescription:
. Я знаю свой домен, поэтому мне обычно не нужно его пропускать, и это упрощает установку ключа NSLocalizedDescription
в информации о пользователе. Опять же, это способствует улучшению ошибок, упрощая их создание и упрощает изменение деталей реализации вашей обработки ошибок.
Я не вижу необходимости, поскольку «NSError» предоставляет свойство домена, которое вы можете установить для любого значения для домена. Какую ценность вы думаете о добавлении с подклассом «NSError»? – trojanfoe
Я тоже думал о том же. Но скажем, сценарии, как разоблачение некоторой информации об ошибке. Могут быть некоторые данные о конкретном домене. – uiroshan
Опять же, уже покрытый 'NSError', добавляя записи в словарь' userInfo'. – trojanfoe