繁体   English   中英

为什么我的if语句第一次不起作用? (Objective-C,Xcode,iPhone)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM