方法删除第二个标签,然后第一个标签,无法正常工作
我知道我错过了一些明显的东西,但是我看不到它。 此方法旨在将标签的文本与文本框的文本进行比较,然后删除文本。 因此,如果第一个标签上显示“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比较。您需要使用isEqualToString
或isEqual
方法。
if (([self.lblFabric2.text isEqualToString:self.txtType.text]))
当您使用==或!=时,您正在比较存储string的指针。
比较NSString
的使用:
if ([myString1 isEqualToString:myString2])
文档
比较使用==的string文字不能保证你所期望的行为。 使用isEqual:
或isEqualToString:
来代替。
当你比较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=@""; } }