Non è una cattiva idea estendere NSError. Ho anche creato una categoria su NSError
per mio uso personale. Mi piacerebbe condividerlo con te.
(1) creare un file strings
per definire tutti i codici di errore:
/* Following are general error messgaes those we can show to user
regarding to Internet connection and request. You can add more
codes. */
"-1001" = "Connection time out";
"-1003" = "Cannot find Host";
"-1004" = "Cannot connect to Host";
"-1005" = "Server is temporarily down";
"-1009" = "The Internet connection appears to be offline";
"-1012" = "Authentication failed";
"2000" = "This is a custom error message"; // custom created error code
/* Always describe unknow error with whatever you want in
except case (i.e. except error codes). If not mentioned
the following line, still you will get message "Unknown error" */
"Unknown error" = "Network error occured";
(2) fare una categoria sul NSError, diciamo "NSError + ErrorInfo":
@interface NSError (ErrorInfo)
-(NSString *)userDescription;
@end
(3) definirlo:
#define ERROR_KEY(code) [NSString stringWithFormat:@"%d",code]
#define ERROR_LOCALIZED_DESCRIPTION(code) NSLocalizedStringFromTable(ERROR_KEY(code),@"Errors",nil)
@implementation NSError (ErrorInfo)
-(NSString *)userDescription
{
NSString *errorDescrption = NSLocalizedStringFromTable(ERROR_KEY(self.code),@"Errors",nil);
if (!errorDescrption || [errorDescrption isEqual:ERROR_KEY(self.code)]){
return NSLocalizedStringFromTable(@"Unknown error",@"Errors",nil);;
}
else{
return ERROR_LOCALIZED_DESCRIPTION(self.code);
}
return nil;
}
@end
(4) Fare uso di esso:
NSError *yourError; // This can be any NSError object you get
yourError = [NSError errorWithDomain:@"yourDomain" code:2000 userInfo:details]; // Just for test
NSLog(@"%@",[yourError userDescription]);
Non vedo la necessità come 'NSError' fornisce una proprietà di dominio che è possibile impostare su qualsiasi valore specifico del dominio. Che valore pensi di aggiungere con una sottoclasse 'NSError'? – trojanfoe
Stavo pensando lo stesso pure. Ma diciamo scenari come esporre qualche informazione in più sull'errore. Possono essere alcuni dettagli specifici del dominio. – uiroshan
Di nuovo, già trattato da 'NSError' aggiungendo voci al dizionario' userInfo'. – trojanfoe