2011-09-30 93 views
2

我正在編程Objective-C 2.0書中的一個小數計算器應用程序。我爲Lion使用XCode 4.1。我完全成功地在代碼中沒有輸入任何錯誤。但是當我在應用程序運行時按下數字按鈕時,標籤不會輸入任何文本。當我按一個數字鍵,就應該找到的UIButton發件人標籤(我已撥出)將NSMutableString分配給UILabel文本

-(IBAction)clickDigit:(UIButton *)sender { 

int digit = sender.tag; 

[self processDigit:digit]; 
    } 

,它被髮送到這個代碼:

-(void)processDigit:(int)digit { 

currentNumber = currentNumber * 10 + digit; 

[displayString appendString:[NSString stringWithFormat:@"%i", digit]]; 
display.text = displayString; 

NSLog(@"Processed"); 

    } 

控制檯可以打印處理。這表明該按鈕是否正常工作,所以問題就出在這行代碼:

[displayString appendString:[NSString stringWithFormat:@"%i", digit]]; 
display.text = displayString; 

顯示器是一個UILabel,它是一個實例變量,但它不是一個IBOutlet,但被聲明爲一個IBOutlet在其屬性。

@property (nonatomic, retain)IBOutlet UILabel *display; 

我已經使用連接到代碼助理的東西連接.xib屏幕上的標籤。我可以從字面上將它連接到聲明。所以我把它連接到了財產。

現在,問題在於display是UILabel,它的text屬性需要NSString而不是NSMutableString嗎?但是一個NSString不能附加一個字符串和我需要爲這個應用程序執行的其他許多方法。我該如何做這項工作?

+0

DisplayString是否已初始化?如果它是零,那麼appendString選擇器將不會執行任何操作。 – Circumflex

+0

嘗試[NSString stringWithFormat:@「%@」,mutableString]將可變字符串轉換爲靜態字符串。不知道這是否是你的問題。 –

+0

NSMutableString是NSString的一個子類,因此將標籤的文本屬性設置爲該可變字符串是完全有效的。在附加數字以確保設置爲預期值後,是否記錄了displayString的值? –

回答

3

NSMutableStringNSString大多可以互換。即如果方法需要NSString,則可以將其傳遞給NSMutableString。然而,這不起作用,而且它們經常被複制並且不可變。即使您通過NSMutableStringUILabeltext屬性,它也會始終返回NSString

我懷疑你在這裏還有其他問題。也就是說,使用不可變字符串比可變字符串更容易。

您可以更改此代碼:

[displayString appendString:[NSString stringWithFormat:@"%i", digit]]; 
display.text = displayString; 

這個代碼:

display.text = [displayString stringByAppendingString:[NSString [email protected]"%i",digit]]; 

因爲stringByAppendingString使得與接收器(displayString)的內容,通過了新的不可變的字符串對象和字符串一個參數([NSString stringWithFormat:@"%i",digit])。

我懷疑你的問題是displayStringnil。 添加一些NSLog的查找...

  1. -(IBAction)clickDigit:(UIButton *)sender添加NSLog(@"Sender is %@",sender)
  2. -(void)processDigit:(int)digit添加NSLog(@"Digit is %i and displayString is %@ and display is %@", digit, displayString, display);

這應該給你一個想法是什麼的對象是零,或連接錯誤在Interface Builder。

+0

是的,我的顯示字符串是(null) 我該如何解決這個問題? – user973985

+0

不要擔心! 我認爲我做了最糟糕的錯誤,不知道 – user973985

+0

不小心把viewDIdLoad代碼放在viewDIdUnload – user973985

0

NSMutableStringNSString。更具體地說,它是一個子類。只分配它,它會工作。

1

我面臨同樣的問題,我發現我錯過了功能「viewDidLoad中」這行代碼在文件「Fraction_CalculatorViewController.m」

displayString =[NSMutableString stringWithCapacity:40]; 

這將解決問題的ISA。

相關問題