我为这行代码得到了以下问题.
"格式字符串不是字符串文字(可能不安全)"
NSLog([NSString stringWithFormat:@"%@", entered]);
有什么建议?
当我从C++调用NSLog时,Xcode抱怨传递给NSLog的格式字符串不是文字字符串.这是触发警告的一行代码:
NSLog(CFSTR("Leaking?"));
我不知道的任何方式代码C++文字的NSString,我没有看到相关的警告,我可以在项目设置中关闭.有没有办法从C++调用NSLog而不触发此消息?我正在使用Xcode 4.2.1.
编辑:这真的是C++代码.我通常避免使用Objective-C++,坚持使用Objective-C或普通的旧C++,因为没有官方文档说明Objective-C++中哪些有用,哪些没有.我只发现模糊的警告(例如)STL的某些部分可能存在问题.我使用模板,STL和C++的其他"高级"功能,所以我想安全地玩它.
编辑#2,解决方案:我只是想通了clang支持的警告标志比实际记录的要多得多.(从Xcode提供给我的长长的警告列表中可以看出这一点.)我尝试了-Wno-format-nonliteral a la gcc,现在Xcode很高兴.
我正在使用宏来简化返回本地化字符串,如下所示:
#define GetLocalStr(key, ...) \
    [NSString stringWithFormat:[[NSBundle mainBundle] localizedStringForKey:key value:@"" table:nil], ##__VA_ARGS__]
基本上,如果您在本地化字符串文件中有一个条目,如"name" = "My name is %@";调用
GetLocalStr( @"name", @"Foo" );
将返回NSString @"My name is Foo"
然而,当我运行它时,如:
NSString * str = GetLocalStr( @"name", @"Foo" );
我得到"格式字符串不是字符串文字"警告.即使遵循关于此警告的其他答案的建议并将其替换为:
NSString * str = [NSString stringWithFormat:@"%@", GetLocalStr( @"name", @"Foo" )];
我仍然得到警告,此外,它有点打破宏观使生活更容易的点.
如何摆脱GetLocalStr#pragma suppressors中包含所有调用的警告?
编辑27/08
在通过CRD的答案并进行更多测试之后,似乎我对错误做了一个错误的假设.澄清:
本地化字符串文件:
"TestNoArgs" = "Hello world";
"TestArgs" = "Hello world %@";
码:
NSString * str1 = GetLocalStr( @"TestNoArgs" ); // gives warning
NSString * str2 …可能重复:
警告:"格式不是字符串文字,没有格式参数"
我有一个开发人员在我的应用程序中的以下代码行.我正在学习Objective C的基础知识,当我更新App兼容iPhone 5时,我看到以下警告(我没有更改他的代码)Format String不是文字字符串(可能不安全).代码如下;
self.progressHud.labelText = [NSString stringWithFormat:message];   
我不确切地知道这意味着什么,也不想上传任何可能是安全问题或被Apple拒绝的内容.大家都非常感谢您的帮助.
我从以下行获得"格式字符串不是字符串文字"警告
NSString *formattedString = [[NSString alloc] initWithFormat:format arguments:valist];
我在以下功能中使用它
- (void)logMessage:(NSString *)format
         level:(LoggingLevel)level
withParameters:(va_list)valist {
         if (level >= self.loggingLevel) {
              NSString *formattedString = [[NSString alloc] initWithFormat:format arguments:valist];        
         } 
知道如何解决这个问题吗?我正在使用Xcode 4.6.3
我正在使用Xcode 4.6.我的应用程序正在使用设备和模拟器,但在构建时我收到警告:
"格式字符串不是字符串文字(可能不安全)"
从这段代码
[sArray addObject:[NSString stringWithFormat:subCatName]];
l.text= [spacing stringByAppendingFormat:[mArray objectAtIndex:section]];
为什么,我该如何解决?
cocoa objective-c compiler-warnings nsstring stringwithformat