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 と表示されますが、コードでは、CDATA などを除いて、常に Clear としてログに記録されます。<![CDATA[ Clear ]]>isEqualToString: にを入れてみましたが、同じ結果になりました。どんな助けでも大歓迎です。私は XML の構文解析に慣れておらず、Objective-C にも比較的慣れていないため、エラーが発生した場合はご容赦ください (コード内ではなく、一般的に)。大変助かります。

4

3 に答える 3

2

CDATAは、内部がすべてプレーンテキスト(XMLではなく)として扱われる必要があることを示す構造です。XMLパーサーはそれを検出すると、CDATAコンストラクトを削除し、コンストラクト内にデータを表示します。

于 2012-06-19T04:10:02.347 に答える
0

代わりに設定

[self.conditionsLabel setText:weather.weathercondition];

この行を使用してください

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

その後、あなたを取得しますweather.weathercondition

NSStringifステートメントを取得して確認します

于 2012-06-19T04:11:06.397 に答える
0

交換してみる

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

<weatherDesc>
<![CDATA[Clear]]>
于 2012-06-19T04:14:56.307 に答える