iOS6问题if/then statments

iOS6问题if/then statments

问题描述:

我在iTunes中有一个应用程序,可以在iOS 4.3上正常工作5.在iOS 6中,它在实际设备和模拟器中都无法正常工作。我看过代码,并没有看到任何问题。不过,我的if/then语句在iOS6中似乎存在问题。该应用程序的功能性是高度依赖于IF/THEN语句,如下面的那些...iOS6问题if/then statments

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

else {} 

基于pageTitle.text的值是否是“阿尔法”,也不是不将上述变化的文本。这一直工作得很好。但是,在iOS6中,即使pageTitle.text等于“Alpha”,它也不会评估为真。同样,这只发生在iOS6中。我插入了NSLog语句来确认pageTitle.text实际上等于“Alpha” - 并且它确实如此。尽管如此,它从来没有评估上述是真的(换句话说,NSLog说pageTitle.text等于“Alpha”,但上面的代码永远不会评估pageTitle.text为“Alpha”)。这只发生在iOS6中。

有没有人有任何想法?对我来说,这似乎是'不可能的',这样的基本事情会在iOS6中发生变化......但也许我错过了一些东西?或者你认为这可能是iOS6中的一个错误?任何帮助都会得到满足。谢谢。

+0

这是你的问题得到了downvoted一个耻辱。移至iOS 6时,我遇到了同样的问题。 – MiguelB

if(pageTitle.text == @"Alpha") 

在这里,你比较两个指针对象。其中之一是一个NSString litteral。
显然,当您比较内存地址时,比较将失败。

如果你想测试相等对两个NSString对象,使用方法:

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

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

+0

谢谢。我为我的错误表示歉意。我会检查你的解决方案,并将其标记为已解决,如果它解决了问题。但是,在此期间,您能否告诉我们为什么它在iOS 4.3和5中可以正常工作,但不在iOS6中?有什么改变吗?谢谢。 – Dev1345

+1

不需要道歉......)我想你真是太幸运了......由于NSString文字通常只定义一次,如果您将'pageTitle.text'分配给文字,则可能会与相同文字进行比较成功,有很多运气......但是当然你不能确定,因为属性设置器实现可能实际上复制了对象。编译器也可以为这两个文字使用不同的对象。在这两种情况下,我们将以两个不同的对象结束,并且使用'=='比较指针地址将会失败。 – Macmade

+1

现在,相同字符串字面值的所有用法在编译时指向同一个NSConstantStringImpl实例,并且不可变字符串的副本仍然是指向同一对象的指针。所以即使[@“Alpha”副本)也能正常工作。但是,是的,它是不可靠的,因为它是一个实现细节。 – Jano

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

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

有关平等与身份的进一步讨论,请阅读this.

+0

感谢您的帮助。我赞成你的回答,但检查了麦克梅尔的答案,因为我得到他的第一个答案,并且自他提供了代码。再次感谢。 – Dev1345