2011-04-04 59 views
0

目前,我有以下代碼:的NSMutableString幫助目標C

-(void) inputNumber:(int)number { 

    NSString *str; 

    str = [NSString stringWithFormat:@"%d", number]; 
    [strVal appendString:str]; 
    txtShowNum.text = strVal; 
} 
我已經定義的NSMutableString * strVal

;之前在我的代碼。

當上面的函數執行領域保持空白,但如果我是使用方法:

txtShowNum.text = str; 

我得到我的意思的價值,但我顯然需要級聯的價值。

任何人都可以對此有所瞭解。

感謝

+0

當你說定義時,你的意思是它已經被初始化或者只是被聲明瞭嗎?像:NSString * strVal = @「」; ? – kailoon 2011-04-04 16:26:55

回答

0

你應該在你的代碼分配一個NSMutableString也被稱爲這個方法在什麼地方。

E.g.像這樣:

-(void) inputNumber:(int)number { 
    if (strVal == nil) strVal = [[NSMutableString alloc] init]; 
    NSString *str = [NSString stringWithFormat:@"%d", number]; 
    [strVal appendString:str]; 
    txtShowNum.text = strVal; 
} 

然而這裏有一些內存問題。你最好strVal一個保留的性質,然後做:

if (self.strVal == nil) self.strVal = [NSMutableString string]; 
+0

這似乎已解決了輸出的問題,但現在當再次調用該方法時,它只會崩潰應用程序。該代碼中有什麼會使應用程序崩潰? – 2011-04-04 16:26:16

+0

如果字符串未保留,則此代碼會使應用程序崩潰。你有一行在你的頭文件中說'@property(nonatomic,retain)NSMutableString strVal;',並且你使用'self.strVal = ...'嗎?然後它不應該崩潰。 – mvds 2011-04-04 16:32:21

+0

謝謝,這就是問題所在,它也需要實現中的@synthesize,如果其他人來閱讀這個問題,那麼只需要注意一下。 – 2011-04-04 16:37:49

0

strVal是最有可能nil,讓你在零基本上什麼事情都不叫appendString:,並設置文本字段以零將其刪除內容。

-4

如果你只是宣佈它作爲一個成員變量,一定要初始化它的地方:

的NSMutableString * strVal = @ 「」;

如果不是,您只需調用一個無對象的方法。

+0

-1,'@「」'是靜態分配的NSString,而不是NSMutableString。 – mvds 2011-04-04 16:30:57

+0

是的,你說得對。我匆匆發佈了這個消息。它應該是NSMutableString * strVal = [NSMutableString alloc] init]; – kailoon 2011-04-04 16:35:39

+0

如果處理不當,會導致內存泄漏,最好使用'[NSMutableString string]'讓它自動釋放。 (或將一個調用添加到'autorelease') – mvds 2011-04-04 16:37:39