Нужен универсальный способ извлечь текст ошибки

Я разработал некоторые 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)

Другие вопросы по тегам