Как динамически создавать аргументы для NSLog? - PullRequest
0 голосов
/ 19 июня 2010

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

A

B

C

D

Е

F

Может случиться так, что, например, C и D не регистрируются, а все остальное. Как бы я создал динамическую вещь, представляющую аргументы значения для NSLog?

Я выбрал NSLog для этого вопроса, потому что он может быть проще с помощью NSPredicate и SUBQUERY. Кажется невозможным динамически построить строку формата NSPredicate при использовании NSMutableString и appendFormat: ... это всегда приводит к ошибкам компиляции для предиката. Я предполагаю, что NSPredicate делает что-то другое с предоставленными значениями формата, чем NSMutableString -appendFormat.

Так что, если бы был способ кормить NSPredicate: 1) огромная, динамически создаваемая строка формата 2) огромный, динамически создаваемый «список» аргументов »

это было бы круто.

Ответы [ 3 ]

2 голосов
/ 20 июня 2010

Что-то подобное должно делать это, условно добавляя части к строке:

NSMutableString* logMsg = [NSMutableString stringWithFormat:@"%@ %@ %@", A, B, C];

if (C) [logMsg appendFormat:@" %@", C];
if (D) [logMsg appendFormat:@" %@", D];

[logMsg appendFormat:@" %@ %@", E, F];

NSLog(@"%@", logMsg);
1 голос
/ 20 июня 2010

Если вы собираете список переменных строк, которые должны быть выведены одновременно, просто используйте NSMutableArray, добавляя строку вывода журнала по мере необходимости. Затем в конце процесса соединяем компоненты строкой:

NSMutableArray *logLines = [[NSMutable alloc] initWithCapacity:10];
...
NSLog(@"Multiple-line output:\n%@",[logLines componentsJoinedByString:@"\n"]);
[logLines release];
1 голос
/ 20 июня 2010

Ваша основная проблема не должна быть проблемой.Просто используйте +predicateWithFormat:argumentArray:.Какая проблема у вас возникла?

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