2017-03-07 175 views
1

我知道这里有一堆问题和答案,但我认为我的情况不同,因为它处理本地化。这可能就是为什么我在理解为什么我无法解决这个警告时拉我的头发。本地化和“格式字符串不是字符串文字”

我得到的 “格式不是一个字符串” 以下代码警告:

[NSString stringWithFormat:[[NSBundle mainBundle] localizedStringForKey:@"TestCompleted2" 
value: @"The test on %@ has completed." table: @"Main"], itemName] 

Main.strings:

"TestCompleted2" = "The test on %@ has completed."; 

我不明白A)为什么它抛出这个错误和B)我如何解决它。

它显然有填充数据,所以不应该是这样。我假设它是因为localizedStringForKey可能会返回一个不同的格式化占位符的字符串,这就是为什么它会抛出错误。那是对的吗?如果是这样,我该如何解决?

+0

问题是你的代码对我来说完全适用。没有警告,运行良好,'stringWithFormat'的结果是你所期望的。你能否提供更多信息来使问题具有可重现性? – matt

+0

那么这只是奇怪的@matt。我只是复制并粘贴我使用的代码。也许我在某处启用了构建警告?我可以尝试一个新项目,看看我是否能像你一样获得相同的体验。 – apple4ever

+0

如果您可以在一个小型测试项目中重现它,请将其发布到某个地方,我可以下载它,我很乐意看一看! – matt

回答

1

终于有机会坐下来调试了。这是由于xcconfig中的-Wformat=2。它的explained here至于它做什么。

感谢大家看看这个。希望这个答案能够帮助别人。

+0

好的工作,我敢肯定这个答案将证明是有用的(并为此提高了投票率)。 – matt

1

我怀疑你在这里没有提及NSLog()是什么导致的警告。

+0

如果是这样,请参阅http://stackoverflow.com/questions/1677824/warning-format-not-a-string-literal-and-no-format-arguments – matt

+0

我不相信我使用NSLog的任何地方靠近导致此警告弹出的代码。上面代码中的这个字符串被发送到TextField进行显示。我想这可能与编译器认为应该有一个参数但不存在的地方有关。 – apple4ever

+0

我仍然希望看到一个测试用例,因为我无法根据您所说的来重现问题。 – matt