2012-06-19 323 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