Ios6 我使用的是Xcode 4.5,我追踪到了一条警告;格式字符串不是字符串文字(可能不安全)";

Ios6 我使用的是Xcode 4.5,我追踪到了一条警告;格式字符串不是字符串文字(可能不安全)";,ios6,xcode4.5,Ios6,Xcode4.5,我面临以下错误: 格式字符串不是字符串文字(可能不安全)[-Wformat security] 我的代码是: appDelegate.reportString = [NSString stringWithFormat:queryString]; 由于您似乎不想格式化字符串(即没有用于格式化字符串的参数),而只是复制它,因此更好的调用是 如果queryString是不可变字符串,而不是NSMutableString,则无需复制它,只需使用 appDelegate.reportString = q

我面临以下错误
格式字符串不是字符串文字(可能不安全)[-Wformat security]

我的代码是:

appDelegate.reportString = [NSString stringWithFormat:queryString];

由于您似乎不想格式化字符串(即没有用于格式化字符串的参数),而只是复制它,因此更好的调用是

如果
queryString
是不可变字符串,而不是
NSMutableString
,则无需复制它,只需使用

appDelegate.reportString = queryString;

同样的结果。

因为您似乎不想格式化字符串(即没有参数可用于格式化字符串),而只是复制它,所以最好的调用是

如果
queryString
是不可变字符串,而不是
NSMutableString
,则无需复制它,只需使用

appDelegate.reportString = queryString;
同样的结果。

问题是“
stringWithFormat
”更喜欢编译时字符串文本,例如:

appDelegate.reportString = [NSString stringWithFormat: @"this is a series of numbers %@", @"123456"];
而在您的例子中,编译器看到的只是一个变量(“
queryString
”),其他什么都没有

如果queryString没有更改,为什么不更改:

appDelegate.reportString = queryString;
这将增加queryString的保留计数。或者您可以执行“
[[NSString alloc]initWithString:queryString]
”或“
[queryString copy]
”来创建全新的保留副本

当然,约阿希姆的回答也很好+向他致敬

问题在于“
stringWithFormat
”更喜欢编译时字符串文字,例如:

appDelegate.reportString = [NSString stringWithFormat: @"this is a series of numbers %@", @"123456"];
而在您的例子中,编译器看到的只是一个变量(“
queryString
”),其他什么都没有

如果queryString没有更改,为什么不更改:

appDelegate.reportString = queryString;
这将增加queryString的保留计数。或者您可以执行“
[[NSString alloc]initWithString:queryString]
”或“
[queryString copy]
”来创建全新的保留副本


当然,约阿希姆的回答也很好+向他致敬

你想用那条线干什么?在这种情况下,appDelegate.reportString=queryString有什么问题?我只是将字符串组合从'queryString'复制到'appDelegate.reportString',但我是在xcode 4.5中运行该项目的,我遇到了上述错误。请帮助我,你想用这行代码做什么?在这种情况下,appDelegate.reportString=queryString有什么问题?我只是将字符串组合从'queryString'复制到'appDelegate.reportString',但我是在xcode 4.5中运行项目的,我遇到了上述错误。请帮助我