2012-07-31 21 views
0

我有這個字符串stringWithFormat和%沒有工作

NSString *jsonString = @"http://www.soccerway.com/a/block_home_matches?block_id=block_home_matches_14&callback_params=%7B%22date%22%3A%222012-07-31%22%2C%22display%22%3A%22all%22%7D&action=showMatches&params=%7B%22competition_id%22%3A721%7D"; 
NSLog(@"%@",jsonString); 

the output is 

http://www.soccerway.com/a/block_home_matches?block_id=block_home_matches_14&callback_params=%7B%22date%22%3A%222012-07-31%22%2C%22display%22%3A%22all%22%7D&action=showMatches&params=%7B%22competition_id%22%3A721%7D 

當我使用

NSString *linkId = @"448";//not a constant value only for example 
NSString *jsonString = [NSString stringWithFormat:@"http://www.soccerway.com/a/block_home_matches?block_id=block_home_matches_14&callback_params=%7B%22date%22%3A%222012-07-31%22%2C%22display%22%3A%22all%22%7D&action=showMatches&params=%7B%22competition_id%22%3A%@%7D",linkId]; 

the output is 

http://www.soccerway.com/a/block_home_matches?block_id=block_home_matches_14&callback_params=7     37040ate23A222㿠     37040isplay23A0x1.21800000507cp-1027ll27D&action=showMatches&params=7      –ompetition_id23A(null)  0 

,你看到的不是same.My問題是如何使用stringWithFormat得到這個結果:

http://www.soccerway.com/a/block_home_matches?block_id=block_home_matches_14&callback_params=%7B%22date%22%3A%222012-07-31%22%2C%22display%22%3A%22all%22%7D&action=showMatches&params=%7B%22competition_id%22%3A448%7D 

所以值(721)剛剛在和被替換爲(448) 預先感謝。

回答

1

查看它的另一種方式是,您將它作爲格式字符串輸入的內容實際上是數據,而不是純粹的格式。

從那些虛假的轉換安全的,你會想:

NSString *jsonString = [NSString stringWithFormat:@"%@%@%@", @"http://www.soccerway.com/a/block_home_matches?block_id=block_home_matches_14&callback_params=%7B%22date%22%3A%222012-07-31%22%2C%22display%22%3A%22all%22%7D&action=showMatches&params=%7B%22competition_id%22%3A",linkId, @"%7D"]; 
+0

謝謝你現在工作得很好。 paxdiablo和Kjuly謝謝 – adellam 2012-07-31 02:59:55

+0

這是一個很好的解決方案! – Kjuly 2012-07-31 03:05:09

3

這是因爲所有的格式字符串中的字符%正在可能用來使用的格式參數,就像%@(見here瞭解詳細信息)。

由此可以看出(對於一個實例),其中:

callback_params=%7B%22date 

轉化爲:

callback_params=7     37040ate 

在這種情況下,我不知道什麼%7B做,因爲它不是一個有效的格式說明符,但%22date產生一個22個字符的十進制值,從%22d開始,然後是文字ate

如果要在輸出字符串中輸入一個%,則需要在格式字符串中使用%%