解决....检查身体底部..
我正在使用XCODE 4
我有一个Money Calculator应用程序,我必须按下数字按钮,我必须在TextLabel上看到它。
格式如:“$ 500”
所以对于$我要附加它..
该方法效果很好,但第三次崩溃..
如果您看到代码,请休息。
在我的应用程序中,我有三个字符串变量......
- (无效)viewDidLoad中 {
current =[[NSString alloc] retain];
current=[[NSUserDefaults standardUserDefaults] valueForKey:@"Total"]];
NSString *newCurrent=[NSString stringWithFormat:@"$ %@",current];
textViewer.text=newCurrent;
NSLog(@"%@",current);
}
- (IBAction)buttonDigitPressed:(id)sender {
NSString *str= (NSString* )[sender currentTitle];
//NSLog(@"1 The Value Of String %@",str);
NSLog(@"Befor Appending %@",current);
if([current isEqualToString:@"0"])
{
current = str;
}
else
{
current = [current stringByAppendingString:str];
NSLog(@"After Appending %@",current);
}
NSString *newCurrent=@"$ ";
newCurrent = [newCurrent stringByAppendingString:current];
textViewer.text= newCurrent;
} 错误是第一次正常工作但
当我第二次打电话时,电流指向某个标准时间 格式化的值,有时它指向某个文件名值,
错误是:EXC BAD ACCESS
当我在没有newCurrent的情况下这样做而没有附加信件时,它可以正常工作。
-------解决---------------- 我的代码中的每一件事都没问题我只需要 [当前保留]; 我将字符串附加到当前的地方。
因为我收到错误EXC BAD ACCESS意味着我指的是之前发布的Object。 所以,我保留了Object。
答案 0 :(得分:0)
无需在两种情况下分配或保留字符串。
在viewdidload中
s = [[NSString alloc] init];
s = @“a”;
NSString *newStr = [NSString stringWithFormat:@"b"];
s = [s stringByAppendingString:newStr];
NSLog(@"s is :%@",s);
答案 1 :(得分:0)
Hello Arpit,
你可以在.h文件中声明nsstring的属性并在.m文件中合成它,所以我认为它可以帮助你。
.h文件
@property (nonatomic,retain)
NSString *current;
.m文件
@synthesize current;
答案 2 :(得分:0)
试试这段代码(没有内存泄漏):
-(void) viewDidLoad
{
current=[[NSString alloc] initWithString:@"20"];
}
-(IBAction)buttonDigitPressed:(id)sender
{
NSString *str= (NSString* )[sender currentTitle];
NSString *nCurrent = [current stringByAppendingString:str];
[current release];
current = [nCurrent retain];
NSString *newCurrent=[[NSString alloc] initWithFormat:@"a%@", current];
textViewer.text= newCurrent;
[newCurrent release];
}
- (void) dealloc
{
[current release];
[super dealloc];
}
答案 3 :(得分:0)
这里有很多问题。
您需要更好地管理内存或仅使用NSMutableStrings。在init或viewDidLoad中将当前更改为NSMutableString alloc / init,然后只使用[current appendString:str];
根据您粘贴的代码,我会执行以下操作。
@interface中的声明了一个属性
@property (nonatomic, retain) NSString *current;
在@implementation中@synthesize
@synthesize current;
- (void) viewdidload
{
self.current = @"20";
}
-(IBAction)buttonDigitPressed:(id)sender
{
NSString *str= (NSString* )[sender currentTitle];
self.current = [self.current stringByAppendingString:str];
NSString *newCurrent = @"a";
newCurrent = [newCurrent stringByAppendingString:self.current];
textViewer.text = newCurrent;
}