NSRunAlertPanel +格式字符串不是字符串文字(可能不安全)

时间:2014-03-10 20:00:40

标签: objective-c nsstring

好的,所以我知道格式字符串不是字符串文字警告,但我不知道为什么它出现在NSRunAlertPanel上,定义是:

  

APPKIT_EXTERN NSInteger NSRunAlertPanel(NSString * title,NSString   * msgFormat,NSString * defaultButton,NSString * alternateButton,NSString * otherButton,...)NS_FORMAT_FUNCTION(2,6);

报告错误时,我通常只在消息上传递error.localizedDescription, 例如:

NSRunAlertPanel(@"error", err.localizedDescription, @"OK",nil,nil);

但升级到xcode 5.1后,我开始收到此警告。

所以我尝试过这样的事情:

NSRunAlertPanel(@"error", [NSString stringWithFormat:@"%@", err.localizedDescription], @"OK", nil, nil);

和它一样的情况。 任何人对如何解决这个问题都有任何想法?

2 个答案:

答案 0 :(得分:8)

msgFormat是消息格式字符串,应该是字符串文字。  在otherButton之后,必要的参数被添加为“可变参数列表”。例如

NSRunAlertPanel(@"error", @"%@", @"OK", nil, nil, err.localizedDescription);
           message format---^         arguments---^

答案 1 :(得分:0)

NSRunAlertPanel 创建警报面板。 (已弃用。请改用NSAlert。)