2017-03-07 225 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