2012-06-19 228 views
0

我有一個if-else語句,它不像我想要的那樣工作。這是保存變量的聲明之前的方法:如果 - 其他語句不起作用

[self.conditionsLabel setText:weather.weathercondition]; 
NSLog(@"%@", weather.weathercondition); 
condition = weather.weathercondition; 

這裏的if-else語句:

if ([weather.weathercondition isEqualToString:@"Clear"]) { 
    conditionsImageView.image = [UIImage imageNamed:@"Sun.png"]; 
} 
else { 
    conditionsImageView.image = [UIImage imageNamed:@"Partly_Sunny.png"]; 
} 

在我的控制檯中,weather.weathercondition出來作爲清楚,但是當它通過if-else語句,它總是進入else並顯示Partly_Sunny.png。我現在正在測試它,並且我知道該字符串將是「清除」。我從一個XML源獲取數據,這是它是如何顯示的數據,如果我看它在互聯網上:

<weatherDesc> 
<![CDATA[ Clear ]]> 

這是什麼原因?它在Clear之前說CDATA,但是在代碼中,它始終記錄爲Clear,沒有CDATA和其他東西。我試着把<![CDATA[ Clear ]]>放在isEqualToString:中,但是結果相同。任何幫助將不勝感激。我是新來的解析XML和Objective-C相對較新的,所以請原諒任何錯誤(不是在代碼中,但通常)。我非常感謝幫助。

+1

確保有不可見字符字符串中的 –

+0

@ Programmer2005:只是一個友好的提示 - 寫問題和答案的時候,如果你選擇你的代碼和XML的樣本,然後按「碼「按鈕時發佈的例子(或如果你縮進他們的四個空格),你不會有問題,如尖括號('<' and '>')被解釋爲標記。對於簡短的內聯樣本,使用反引號(')。有關更多信息,請參閱[編輯幫助](http://stackoverflow.com/editing-help)。 – Mac

+0

感謝您的提示,對不起,我不太確定我應該如何使用它,我的責任是檢查編輯幫助,再次感謝提示。你每天都會學到新的東西:) – sridvijay

回答

2

CDATA是一種構造體,表示無論內部應該被視爲純文本(而不是XML)。當XML解析器檢測到它時,它將移除CDATA構造並在構造內呈現數據。

+0

謝謝你清理那個,以前我從來沒有見過,所以我很困惑,但我現在明白了,謝謝! – sridvijay

+0

原來,它帶走了CDATA後的第一個空間,但沒有條件後的空間(在我的例子中,所以我的字符串不是「清除」,但它是「清除」)。由於空間位於字符串的末尾,我無法意識到它在那裏,但在經過一些測試後,我意識到這是造成問題的原因,之後,它就起作用了!解析器不會佔用它之後的空間,僅在它之前(至少在我的情況下)。 – sridvijay

0

設置,而不是

[self.conditionsLabel setText:weather.weathercondition]; 

使用此行

[self.conditionsLabel setText:[NSString stringWithFormat:@"%@", weather.weathercondition]]; 

後得到您的weather.weathercondition

得到NSString與if語句

+0

試過了,結果相同。 – sridvijay

0

嘗試更換檢查

<weatherDesc> 
<![CDATA[ Clear ]]> 

<weatherDesc> 
<![CDATA[Clear]]> 
+0

這不是我可以控制的,就像nhahtdh說的那樣,它是「一個表示什麼內部應該被視爲純文本的結構」,所以當解析器檢測到它時,所有看不見的字符串都被帶走。 – sridvijay