-1

我在 iTunes 中有一个在 iOS 4.3 和 5 上运行良好的应用程序。在 iOS 6 中,它在实际设备和模拟器中都无法正常运行。我查看了代码,没有发现任何问题。尽管如此,我在 iOS6 中的 if/then 语句似乎存在问题。应用程序的功能高度依赖于 if/then 语句,例如以下...

if (pageTitle.text == @"Alpha")
{
    fieldName.text = @"A";  
    anotherFieldName.text = @"AlphaText";
}

else {}

以上根据 pageTitle.text 的值是否为“Alpha”来更改文本。这一直运作良好。然而,在 iOS6 中,即使 pageTitle.text 等于“Alpha”,它也永远不会评估为真。同样,这只发生在 iOS6 中。我已插入 NSLog 语句以确认 pageTitle.text 实际上等于“Alpha” - 确实如此。尽管有这个事实,它永远不会评估上面的内容为真(换句话说,NSLog 说 pageTitle.text 等于“Alpha”,但上面的代码永远不会将 pageTitle.text 评估为“Alpha”)。这只发生在 iOS6 中。

有没有人有任何想法?在我看来,像这样基本的东西在 iOS6 中会发生变化,这似乎是“不可能的”……但也许我错过了什么?还是您认为这可能是 iOS6 中的错误?任何帮助将不胜感激。谢谢你。

4

2 回答 2

3

您的代码的问题不在于 if-else 逻辑,而在于 if 条件。比较两个字符串是否相等的正确方法是:

if ([pageTitle.text isEqualToString:@"Alpha"])
{
    fieldName.text = @"A";  
    anotherFieldName.text = @"AlphaText";
}
else 
{
...
}

有关平等与身份的进一步讨论,请阅读此内容。

于 2012-09-25T01:01:38.193 回答
2
if( pageTitle.text == @"Alpha" )

在这里,您正在比较两个指向对象的指针。其中一个是NSString乱七八糟的。
显然,当您比较内存地址时,比较将失败。

如果要测试两个NSString对象是否相等,请使用:

if( [ pageTitle.text isEqualToString: @"Alpha" ] == YES )

然后你会有一个真正的字符串比较。

于 2012-09-25T00:51:56.953 回答