Украсить NSLog NSArray & NSDictionary - PullRequest
40 голосов
/ 19 августа 2011

Я имею дело с глубоко вложенными NSArray и NSDictionary, и это, по меньшей мере, отнимает много времени.[data objectatindex: 0] valueForKey: @ "blah"] и т. д. и т. д.

Кто-нибудь знает о хорошей категории iOS для рекурсивного ведения журнала структуры, выделения типа и отображения значений?

Возможнопросить немного, но вы никогда не знаете:)

Ответы [ 4 ]

128 голосов
/ 29 апреля 2013

Хм.Простой

NSLog( @"%@", dictionaryYouWantToPrint );

выводит для меня следующий результат:

{
    id = 1;
    matchCount = 0;
    matchPattern = abcdef;
    number = "123456";
    sessionID = 5;
    status = Unknown;
    timerStart = 1367229348;
}
48 голосов
/ 02 ноября 2011

Может быть, вот так?

for (id key in dictionary) {
    NSLog(@"key: %@, value: %@ \n", key, [dictionary objectForKey:key]);
}

, но я не могу придумать какого-либо приятного способа получить красивый вывод, кроме как скопировать и вставить его в jsonFormatter (например)

РЕДАКТИРОВАТЬ : @ Андрей Стародубцев имеет решение для XCode> 5.x ниже:

NSLog( @"%@", dictionaryYouWantToPrint );
1 голос
/ 08 апреля 2017

Это будет печатать в консоли без NSLog.

Во время отладки, когда ваша точка останова ниже вашего словаря, вы можете набрать в консоли

NSDictionary * myDict = ...;

po myDict

и вы получите печатный словарь в консоли.

Вы даже можете приводить объекты в консоли других типов:

enter image description here

1 голос
/ 05 апреля 2013

Может быть, вы можете использовать блок после iOS5, как

[anArray enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL *stop) {
    NSLog (@"object->%@",object);
}];

[aDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id object, BOOL *stop){
    NSLog(@"key->%@, value-> %@",key,object);
}];
...