方法删除第二个标签,然后第一个标签,无法正常工作

我知道我错过了一些明显的东西,但是我看不到它。 此方法旨在将标签的文本与文本框的文本进行比较,然后删除文本。 因此,如果第一个标签上显示“Puppy”,第二个标签显示“Kittens”,而文本框中显示“Kittens”,则应该删除第二个标签的文本并留下第一个标签的文本。 如果第二个标签是空白的,那么该方法应该删除第一个标签的文本。

但是,不pipe怎样,我都会把这个方法搞糊涂,或者删除第二个标签,而不是第一个,删除它们,或者删除它们中的任何一个。 这是我试过的(lblFabric1是第一个标签,lblFabric2是第二个标签,txtType是文本框):

-(IBAction)btnDelete:(id)sender { if ((self.lblFabric2.text== self.txtType.text)) { self.lblFabric2.text = @""; } else if ((self.lblFabric2.text != self.txtType.text)) { self.lblFabric1.text=@""; } } 

它删除第二个标签,但不是第一个标签。 如果我尝试设置“Else if”来:

 else if ((self.lblFabric2.text==@"")) 

它给了我一个错误(“”直接比较string文字有未定义的行为。“)我只是在这个错误的方式?我错过了什么?

您不应该在Objective C中使用==或!=进行string比较。您需要使用isEqualToStringisEqual方法。

 if (([self.lblFabric2.text isEqualToString:self.txtType.text])) 

当您使用==或!=时,您正在比较存储string的指针。

比较NSString的使用:

 if ([myString1 isEqualToString:myString2]) 

文档

比较使用==的string文字不能保证你所期望的行为。 使用isEqual:isEqualToString:来代替。

请参阅http://nshipster.com/equality/

当你比较NSString==你实际上比较两个内存地址,这不是你真正的目的。 你想比较两个string的值是什么==运算符不适合,因此你得到的警告

直接比较string文字具有未定义的行为。

要比较NSString的值,你应该使用isEqualToString:方法。 你也可以使用派生自NSObject类的isEqual:方法,但不适合于Unicode比较。 所以isEqualToString:总是最安全的赌注。

在使用isEqualToString:你的代码应该看起来像这样:

 -(IBAction)btnDelete:(id)sender { if ([self.lblFabric2.text isEqualToString:self.txtType.text]) { self.lblFabric2.text = @""; } else { self.lblFabric1.text=@""; } }