Как вывести данные, хранившие в объективном-c объекте (NSArray или NSDictionary)

45
задан Mariusz Jamro 25 June 2012 в 11:43
поделиться

4 ответа

В Какао нет никакого "дампа" как print_r или Python PHP repr, так как нет никакого текстового формата, который "представляет" объект как на тех языках. Если Вы используете

NSLog(@"%@", myObj);

или

NSString *stringRep = [NSString stringWithFormat:@"%@",myObj];

, или

NSString *stringRep = [myObj description];

Вы станете (зарегистрированными к консоли в первом случае), результат [myObj description], метод, определенный в NSObject в целях печати описание ( не дамп) объекта.

, Если Вы вызываете po myObj в gdb, Вы добираетесь [myObj debugDescription] (часто то же как description, но не всегда).

Классы как NSArray и NSDictionary и NSData переопределение description для печати довольно полезного рекурсивного описания их содержания, но значения по умолчанию [NSObject description] печать только значение указателя, соответствующее экземпляру.

при управлении кодом для рассматриваемых типов можно переопределить их description или debugDescription методы для возврата чего-либо, что Вы хотите. В противном случае Вы могли переопределить description или debugDescription метод с помощью категории или использовать категорию для определения myDebugDescription или некоторые таким образом, что Вы могли тогда вызвать от gdb использование po [myObj myDebugDescription].

72
ответ дан Barry Wark 26 November 2019 в 21:04
поделиться

можно также использовать объектную команду печати gdb для быстрого просмотра объекта в отладчике:

po dictionary

Это будет в основном тем же как называющий NSLog (...) из Вашего кода.

Также полезный при распечатывании NSData, который содержит данные ASCII:

p (char *) [data bytes]
16
ответ дан Ben Gottlieb 26 November 2019 в 21:04
поделиться

Используйте NSLog () для дампа содержания объектов. Например:

NSData* myData = //... assume this exists
NSLog(@"Contents of myData: %@", myData);

NSLog имеет строку формата printf-стиля (ожидает объект NSString), сопровождаемый списком переменных параметров, точно так же, как printf. % символа замены представляет объект метод описания на объекте. Это полезно для дампа большинства объектов Objective C в Какао.

, Если Вы хотите вывести содержание объекта с помощью gdb (я вижу, Вы отметили это с gdb), используйте специальную "почтовую" директиву вместо печати. Например:

gdb) po myData

заставит gdb выводить объект myData. почтовый ярлык для объекта печати.

10
ответ дан Jason Coco 26 November 2019 в 21:04
поделиться

Будьте осторожны с NSLog, регистрирующимся-> Вы, скорее всего, не хотите его в производственном коде.

можно хотеть использовать альтернативную функцию входа, которая называет NSLog, когда продукт работает в режиме отладки.

4
ответ дан diciu 26 November 2019 в 21:04
поделиться