的NSMutableString帮助目标C

问题描述:

目前,我有以下代码:的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

你应该在你的代码分配一个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

strVal是最有可能nil,让你在零基本上什么事情都不叫appendString:,并设置文本字段以零将其删除内容。

如果你只是宣布它作为一个成员变量,一定要初始化它的地方:

的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