Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
发布iOS6如果/那么声明_Ios_If Statement_Ios6 - Fatal编程技术网

发布iOS6如果/那么声明

发布iOS6如果/那么声明,ios,if-statement,ios6,Ios,If Statement,Ios6,我在iTunes上有一个应用程序,可以在iOS 4.3和5上正常运行。在iOS 6中,它不能在实际设备和模拟器上正常工作。我看过代码,没有发现任何问题。然而,我在iOS6中的if/then语句似乎存在问题。应用程序的功能高度依赖于if/then语句,如以下语句 if (pageTitle.text == @"Alpha") { fieldName.text = @"A"; anotherFieldName.text = @"AlphaText"; } else {} 以上

我在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”,它也永远不会计算为true。同样,这只发生在iOS6中。我插入了NSLog语句以确认pageTitle.text实际上等于“Alpha”-它确实如此。尽管存在这一事实,但它从未将上述内容计算为真(换句话说,NSLog说pageTitle.text等于“Alpha”,但上面的代码从未将pageTitle.text计算为“Alpha”)。这只发生在iOS6中

有人有什么想法吗?在我看来,像这样基本的东西在iOS6中会发生改变似乎是“不可能的”…但也许我错过了什么?或者你认为这可能是iOS6中的一个bug?任何帮助都将被告知。多谢各位

if( pageTitle.text == @"Alpha" )
这里,您将两个指针与对象进行比较。其中一个是
NSString
literal.
显然,在比较内存地址时,比较将失败

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

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

然后将进行真正的字符串比较。

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

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

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

谢谢。我为我的错误道歉。我将检查您的解决方案,并将其标记为已解决,如果它解决了问题。然而,与此同时,你能告诉我为什么它在iOS 4.3和5中工作正常,但在iOS 6中却不行吗?有什么变化吗?谢谢。不用道歉……:)我猜你只是很幸运。。。由于NSString文本通常只定义一次,如果将
pageTitle.text
分配给一个文本,那么与同一个文本的比较可能会成功,幸运的是。。。但当然,您不能确定这一点,因为属性设置器实现实际上可能会复制对象。编译器也可以对这两个文本使用不同的对象。在这两种情况下,我们将以两个不同的对象结束,而使用
=
对指针地址的比较将失败。现在,在编译时,相同字符串文本的所有使用都指向相同的NSConstantStringImpl实例,不可变字符串的副本仍然是指向相同对象的指针。因此,即使是[@“Alpha”拷贝]也会起作用。但是是的,这是不可靠的,因为这是一个实现细节。非常感谢Macmade&Jano的帮助。我想我以前很幸运。由于它突然停止与iOS6一起工作(并且由于NSLog给出了我预期的结果),我认为iOS6中有一个bug。很高兴你告诉我正确的方法,这样我就不会再犯同样的错误了。我对你的两个答案都投了赞成票,并将其标记为已解决。(不幸的是,我的问题两次被否决……但我想得到你的善意帮助是值得的。)再次感谢。谢谢你的帮助。我对你的答案投了赞成票,但在我得到他的第一个答案和他提供的代码后,我检查了MacMake的答案。再次感谢。你的问题被否决了,真遗憾。我在升级到iOS 6时遇到了完全相同的问题。