Нужен универсальный способ извлечь текст ошибки
Я разработал некоторые iOS 6.1
код для решения NSError
, Но я не доволен этим. Это в лучшем случае взломать
-(bool) reptErrAtModule: (NSString *) module
atSubr: (NSString *) subr
atFunc: (NSString *) func
withErr: (NSError *) err
{
id value = [[err userInfo] objectForKey: NSUnderlyingErrorKey];
NSString * errDesc = (value != nil) ?
[value localizedDescription]:
(NSString *)[[err userInfo] objectForKey: @"reason"];
NSLog( @"ERR -> %@",[NSString stringWithFormat:
@"(%@>%@) %@ failed! %@",module,subr,func,errDesc] );
}
У меня была более простая форма (без (NSString *)[[err userInfo] objectForKey: @"reason"]
случай), и это работало на ошибки, которые я получил от звонков removeItemAtPath
,
Но потом я получил ошибку из этого кода:
NSPersistentStore * entStor =
[myPerStoCor addPersistentStoreWithType: NSSQLiteStoreType
configuration: nil
URL: [NSURL fileURLWithPath: Path]
options: nil
error: &err];
И моя рутина не смогла извлечь ошибку. Поэтому я добавил @"reason"
логика, потому что я мог видеть нужный текст в данных Info в отладчике.
Теперь код работает с обоими типами ошибок, но я думаю, что это не способ сделать это. Должен быть лучший, более общий способ устранения всех типов ошибок, которые система может вам вернуть NSError
,
2 ответа
Я использую это:
NSString *description = error.localizedDescription;
NSString *reason = error.localizedFailureReason;
NSString *errorMessage = [NSString stringWithFormat:@"%@ %@", description, reason];
В целях отладки вы в идеале хотите выйти из всего содержимого ошибки. Грубо говоря это domain
, code
, а также userInfo
, Имейте в виду, что userInfo
вполне может включать в себя основную ошибку, к которой вы хотите применить ту же логику. А в некоторых случаях ошибка может содержать описание (или причину сбоя и т. Д.), Которого нет вuserInfo
,
Если вы прокрутите вниз мой пост в блоге по адресу http://www.mikeabdullah.net/easier-core-data-error-debugging.html, там будет фрагмент, показывающий, как создать словарное представление для NSError
объект, а затем получить строковое представление этого. Это очень удобно для отладки / регистрации.
Для представления пользователям, хотя, -[NSError localizedDescription]
специально разработан для таких целей. -localizedFailureReason
выполняет аналогичную роль, стараясь указать, что пошло не так, без контекста выполняемой операции. (Один из способов думать об этом localizedDescription = task desceription + localizedFailureReason
)