簡體   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