在iOS中使用UILabel的这个条件语句有什么错?

在iOS中使用UILabel的这个条件语句有什么错?,ios,objective-c,uilabel,Ios,Objective C,Uilabel,在Xcode中使用UILabel这个条件语句有什么不对 过于简化的示例,但我正在尝试更改UILabel中与UILabel中文本相关的内容 -(IBAction)answerQuestion:(id)sender{ NSString *startingLableContent = @"Do dogs bark?"; NSString *answer = @"Yes."; NSString *askAnother = @"What else do you want?";

在Xcode中使用
UILabel
这个条件语句有什么不对

过于简化的示例,但我正在尝试更改
UILabel
中与
UILabel
中文本相关的内容

-(IBAction)answerQuestion:(id)sender{
    NSString *startingLableContent = @"Do dogs bark?";
    NSString *answer = @"Yes.";
    NSString *askAnother = @"What else do you want?";
    if (mainLable.text == startingLableContent) {
        mainLable.text = answer;
    }else if (mainLable.text == answer){
        mainLable.text = askAnother;
    }
}

您应该使用
isEqualToString

像这样:

if ([mainLable.text isEqualToString:startingLableContent]) 

否则,您将测试内存位置而不是内容。

要比较Objective-C中的字符串,请使用isEqualToString

-(IBAction)answerQuestion:(id)sender{
    NSString *startingLableContent = @"Do dogs bark?";
    NSString *answer = @"Yes.";
    NSString *askAnother = @"What else do you want?";
    if ([startingLableContent isEqualToString:mainLable.text]) {
        mainLable.text = answer;
    }else if ([answer isEqualToString:mainLable.text]){
        mainLable.text = askAnother;
    }
}
试试这个:

if ([mainLable.text isEqualToString:startingLableContent]) {
// do stuff
}
== 事实证明,如果(someString==someOtherString),你不能只说
。它几乎总是返回
NO

它与字符串存储在内存中的位置有关。您可以将
==
与int和double以及诸如此类的东西一起使用,但对于NSString,您需要执行以下操作:

if([mainlab.text IsequalString:someOtherString])
因此,您的方法应该如下所示:

-(IBAction)answerQuestion:(id)sender{
    NSString *startingLableContent = @"Do dogs bark?";
    NSString *answer = @"Yes.";
    NSString *askAnother = @"What else do you want?";
    if ([mainLable.text isEqualToString:startingLableContent]) {
        mainLable.text = answer;
    }else if ([mainLable.text isEqualToString:answer]){
        mainLable.text = askAnother;
    }
}

比较指针,而不是实际的字符串。如果您想比较字符串,请考虑使用<代码> ISQualtoStudio。

如果它们都指向同一个NSLASH对象,<代码>=< /代码>将返回true。@ MarcusAdams,这有多长时间发生?如果这种情况发生在现实世界中,我建议你暂时远离雷暴。如果编译器在编译时知道字符串是同一个字符串,它会自动将字符串指向其他字符串。否则,如果在编译时知道它们是相等的,就不会这样做。这将用于运行时检查,有很多理由这样做。Hair的答案是正确的,这是第一个。你试过搜索“Objective-C比较字符串”吗?他怎么知道搜索“Objective-C比较字符串”时,他没有意识到他做错了什么?嗯,在我看来,比较Objective-C中的两个字符串并不能得到预期的结果是很自然的。@MartinR也许这就是为什么你有28k的声誉,而不是4:)从技术上讲,在这种情况下,你也可以使用
isEqual
,但我不会。