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中的一个错误?任何帮助都会得到满足。谢谢。
if(pageTitle.text == @"Alpha")
在这里,你比较两个指针对象。其中之一是一个NSString
litteral。
显然,当您比较内存地址时,比较将失败。
如果你想测试相等对两个NSString
对象,使用方法:
if([ pageTitle.text isEqualToString: @"Alpha" ] == YES)
然后你就会有一个真正的字符串比较。
谢谢。我为我的错误表示歉意。我会检查你的解决方案,并将其标记为已解决,如果它解决了问题。但是,在此期间,您能否告诉我们为什么它在iOS 4.3和5中可以正常工作,但不在iOS6中?有什么改变吗?谢谢。 – Dev1345
不需要道歉......)我想你真是太幸运了......由于NSString文字通常只定义一次,如果您将'pageTitle.text'分配给文字,则可能会与相同文字进行比较成功,有很多运气......但是当然你不能确定,因为属性设置器实现可能实际上复制了对象。编译器也可以为这两个文字使用不同的对象。在这两种情况下,我们将以两个不同的对象结束,并且使用'=='比较指针地址将会失败。 – Macmade
现在,相同字符串字面值的所有用法在编译时指向同一个NSConstantStringImpl实例,并且不可变字符串的副本仍然是指向同一对象的指针。所以即使[@“Alpha”副本)也能正常工作。但是,是的,它是不可靠的,因为它是一个实现细节。 – Jano
这是你的问题得到了downvoted一个耻辱。移至iOS 6时,我遇到了同样的问题。 – MiguelB