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