Как красиво напечатать объект NSError в консоли XCode? - PullRequest
8 голосов
/ 24 августа 2011

Я напечатал объект NSError в консоли XCode (через NSLog(@"%@", error);), и для определенного рода ошибки вот что я получаю:

Domain=NSCocoaErrorDomain Code=133020 "The operation couldn’t be completed. (Cocoa error 133020.)" UserInfo=0xe939170 {conflictList=(
    "NSMergeConflict (0xe93cad0) for NSManagedObject (0x5dba970) with objectID '0x5dc26f0 <x-coredata://775D53AE-58A4-4B18-BA52-D46781A183AE/SomeObject/p1>' with oldVersion = 2 and newVersion = 3 and old object snapshot = {\n    creationDate = \"2011-08-24 06:52:22 +0000\";\n    prop1 = \"a65e349a-b315-488e-b7f8-e459e353fd6e\";\n    username = \"test-user\";\n    password = \"foobar\";\n} and new cached row = {\n    creationDate = \"2011-08-24 06:52:22 +0000\";\n    prop1 = \"a65e349a-b315-488e-b7f8-e459e353fd6e\";\n    username = \"test-user\";\n    password = \"foobar\";\n}"

Когда я заменяю все '\ n' на новую строку и все \ 's на' в emacs, я получаю очень красиво отформатированное сообщение об ошибке:

Domain=NSCocoaErrorDomain Code=133020 "The operation couldn’t be completed. (Cocoa error 133020.)" UserInfo=0xe939170 {conflictList=(
    "NSMergeConflict (0xe93cad0) for NSManagedObject (0x5dba970) with objectID '0x5dc26f0 <x-coredata://775D53AE-58A4-4B18-BA52-D46781A183AE/SomeObject/p1>' with oldVersion = 2 and newVersion = 3 and old object snapshot = {
    creationDate = "2011-08-24 06:52:22 +0000";
    prop1 = "a65e349a-b315-488e-b7f8-e459e353fd6e";
    username = "test-user";
    password = "foobar";
} and new cached row = {
    creationDate = "2011-08-24 06:52:22 +0000";
    prop1 = "a65e349a-b315-488e-b7f8-e459e353fd6e";
    username = "test-user";
    password = "foobar";
}"

Я бы предпочел видеть это красиво отформатированное сообщение об ошибке в самом Xcode, а не копировать-вставлять его и искать и заменять символы в другом редакторе. Есть ли способ сделать это?

РЕДАКТИРОВАТЬ Для ясности, ошибка генерируется операцией сохранения данных ядра:

NSError *error
if (![context save:&error]) {
    NSLog(@"%@", error);
}

В этом случае ошибочная часть объекта ошибки (откуда печатаются \ n и \) - это значение ключа conflictList в словаре userInfo ошибки.

Ответы [ 2 ]

9 голосов
/ 07 июля 2013

userInfo - это NSDictionary

 NSLog(@" error => %@ ", [errorOrNil userInfo] )

Печатает что-то подобное для меня

error => {
    NSLocalizedDescription = "User already exists";
    NSLocalizedFailureReason = "";
    NSLocalizedRecoverySuggestion = "Retry request based on information in `NSLocalizedFailureReasonErrorKey`";
    kinveyErrorCode = UserAlreadyExists;
    kinveyInternalErrorString = "";
    kinveyRequestId = e5be0aed155e4925b3365d57de3dc5b2;
} 

Вы также можете попробовать:

 NSLog(@" error => %@ ", [errorOrNil localizedDescription] )

Что выводит:

You got an error: User already exists 
1 голос
/ 24 августа 2011

Не очень крутое решение - вы можете написать свою собственную категорию для класса NSError и представить текст так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...