Получить __PRETTY_FUNCTION__ чтобы печатать только первую часть селектора? - PullRequest
2 голосов
/ 01 мая 2011

Можно ли сделать так, чтобы макрос __PRETTY_FUNCTION__ разрешал только первую часть селектора ObjC?

-(void)arg1:(int)a1 arg2:(int)a2 arg3:(int)a3 {
     printf("%s\n",__PRETTY_FUNCTION__);
     /* Prints 'arg1:arg2:arg3'
        I want it to print 'arg1'
      */
}

Ответы [ 2 ]

4 голосов
/ 01 мая 2011

Затем вы должны отредактировать эту строку, используя что-то вроде:

NSString *method = [NSString stringWithFormat:@"%s", __PRETTY_FUNCTION__];
[method substringToIndex:[method rangeOfString:@":"].location];

Затем вы могли бы сделать из него макрос для простоты использования (использование _cmd дает лучшие результаты, как отмечено Ole )

#define __LOG_PRETTY_FUNCTION__ { \
    NSString *method = NSStringFromSelector(_cmd); \
    NSUInteger location = [method rangeOfString:@":"].location; \
    if(location == NSNotFound) NSLog(@"%@", method); \
    else NSLog(@"%@", [method substringToIndex:location]); \
}
3 голосов
/ 01 мая 2011

Нет.Но вы можете легко написать свой собственный макрос, который принимает _cmd (один из двух скрытых аргументов, передаваемых каждому методу), преобразует его в строку с NSStringFromSelector() и анализирует строку, чтобы удалить все после и включая первое найденное двоеточие.

...