Определить макрос для замены кода

Я использую TestFlight, и у меня есть этот макрос для замены NSLog эквивалентом удаленного ведения журнала TestFlight.

 #define NSLog(__FORMAT__, ...) TFLog((@"%s [Line %d] " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)

Я только что скопировал это с веб-сайта TestFlight, и теперь я хотел бы создать свой собственный для немного другой цели.

Я хотел бы иметь возможность печатать...

MyEventLog(@"Something happened.");

...и чтобы он интерпретировал это как...

[[MyEventLogManager sharedInstance] newLogWithText:@"Something happened"];

Я просто не уверен, как работает синтаксис.


person Fogmeister    schedule 21.02.2013    source источник


Ответы (2)


#define MyEventLog(message) [[MyEventLogManager sharedInstance] newLogWithText:message]

Однако вам будет полезно предоставить varargs-версию этого метода, чтобы вы могли передавать ему форматированный текст:

- (void)newLogWithFormat:(NSString *)format, ...
{
    va_list va;
    va_start(va, format);
    NSString *message = [[NSString alloc] initWithFormat:format arguments:va];
    va_end(va);

    [self newLogWithText:message];

    // If not using ARC, then:
    // [message release];
}

и используйте:

#define MyEventFormat(__FORMAT__, ...) [[MyEventLogManager sharedInstance] newLogWithFormat:__FORMAT__, ##__VA_ARGS__]
person trojanfoe    schedule 21.02.2013
comment
Должен ли я писать свою функцию для интерпретации форматирования? Или формат NSString является полной строкой? Спасибо еще раз - person Fogmeister; 21.02.2013
comment
@Fogmeister Я обновил свой ответ, показав реализацию метода ведения журнала, а не его объявление. Я также изменил имя макроса на MyEventFormat, чтобы вы могли использовать как версию с одной строкой, так и версию с переменными аргументами. - person trojanfoe; 21.02.2013
comment
@Fogmeister Не забудьте опубликовать это сообщение, если вы не используете ARC! - person trojanfoe; 21.02.2013

Вы можете взглянуть на мой LoggingEngine, я использую что-то похожее на это.

#define PBLog(s,...) [PBLog logFile:__FILE__ withLineNumber:__LINE__ andFormat:(s), ##__VA_ARGS__]

Здесь вы можете видеть, что я вызываю метод [PBLog logfile:withLineNumber:andFormat:]

https://github.com/nerdishbynature/PBLog

person btype    schedule 21.02.2013