[英]Why does my if statement not work the first time? (Objective-C, Xcode, iPhone)
OB-C的新功能在这里。 Java程序员按行业分类。
这是我的view.m文件中的示例。 我有一个从按钮上取一些数字的显示器。 如果显示屏显示0,则应在附加新数字之前先清除0。
- (IBAction) btn1:(id) sender{[self numPress: (NSString *) @"1"];};
- (IBAction) btnClear:(id) sender{display.text = @"0";};
- (void) numPress : (NSString *) key {
if (display.text == (NSString *) @"0")
display.text = @"";
display.text = [display.text stringByAppendingString: key];
}
- (void) viewDidLoad {
self.display.text = (NSString *) @"0";
}
如图所示运行它时,显示设置为“ 0”,然后如果我按“ 1”,则显示更改为“ 01”。 如果我按清除,则显示将重置为“ 0”,如果我再次按“ 1”,则显示将变为“ 1”。 (预期结果)。 我第一次按“ 1”时,应该删除0。
如果我将viewDidLoad更改为将display.text设置为“ 2”,并将numPress if语句条件更改为“ 2”,那么它将起作用。
- (IBAction) btn1:(id) sender{[self numPress: (NSString *) @"1"];};
- (IBAction) btnClear:(id) sender{display.text = @"0";};
- (void) numPress : (NSString *) key {
if (display.text == (NSString *) @"2")
display.text = @"";
display.text = [display.text stringByAppendingString: key];
}
- (void) viewDidLoad {
self.display.text = (NSString *) @"2";
}
我先构建然后运行,显示屏显示“ 2”。 我按“ 1”,显示变为“ 1”。 (应清除开头的“ 2”)。
有人可以在这里帮助我,为什么“ 2”有效,但“ 0”无效(仅第一时间),这使我感到困惑?
使用-isEqualToString:
而不是比较指针(使用==
)。
if ([display.text isEqualToString:@"..."])
/* ... */ ;
您会发现自己做的比较不正确
==
当与指针一起使用时,将比较实际的指针值而不是实际的对象。
您应该将其重写为此。
- (IBAction) btn1:(id) sender {[self numPress:@"1"];}; // no need to cast, you have an NSString literal
- (IBAction) btnClear:(id) sender {display.text = @"0";};
- (void) numPress : (NSString *) key {
if (display.text isEqualToString:@"0")
display.text = @"";
display.text = [display.text stringByAppendingString: key];
}
- (void) viewDidLoad {
self.display.text = @"0"; // again you have a literal
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.