2015-10-13 12 views
2

假设我有一个返回BOOL等的方法:如何给当格式说明错误地传递给方法的警告

+(BOOL) isNewCar { 
    //returns YES or NO 
} 

,然后我用这个方法在NSLog为:

NSLog("Is my car new, the answer is %@", [MyUtil isNewCar]); 

然后我得到编译器警告为:

enter image description here

如果我忽略警告并运行,应用程序崩溃。 现在我有一个名为printCar另一种方法,它接受变量参数就像NSLog其实现:

-(void) printCar:(NSString *)msg, ... { 
    NSString * contents; 
    va_list args; 
    va_start(args, msg); 
    contents = [[NSString alloc] initWithFormat:msg arguments:args]; 
    va_end(args); 
    [self writeToFile:contents]; 
} 

当我用上面的方法为:

[self printCar:@"The car is mine or not : %@", [MyUtil isNewCar]]; 

编译产生警告。此外,该应用程序崩溃。

问题:如果给我们的自定义方法提供了错误的格式说明符,就像NSLog一样,有没有办法生成警告?

在此先感谢!

回答

3

是的,你需要NS_FORMAT_FUNCTION宏来做到这一点,如果按命令,然后单击NSLog方法,你也可以把它

void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2) 

所以你的方法

-(void) printCar:(NSString *)msg, ... 

变得

-(void) printCar:(NSString *)msg, ... NS_FORMAT_FUNCTION(1,2) 

你也可以命令点击NS_FORMAT_FUNCTION查看更多详情

+0

正是我需要的!谢谢! –