Как красиво распечатать объект NSError в консоли XCode?
Я напечатал объект 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 ответа
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
Не очень крутое решение - вы можете написать свою собственную категорию для класса NSError и представлять текст так, как вы хотите.