Когда я добавляю строку NSString с другой строкой NSst, это дает мне ошибку "EXC BAD ACCESS"? - PullRequest
0 голосов
/ 31 августа 2011

Решено .... Проверка в нижней части тела ..

Я использую XCODE 4

У меня есть приложение для калькулятора денег, в котором я должен нажимать цифровые кнопки и у меня естьчтобы увидеть его на TextLabel.

Формат как: "$ 500"

Так что за $ я добавляю его ..

Метод работает дважды хорошо, но в третий разэто дает сбой ..

Отдых, если вы видите код, у вас будет идея.

В моем приложении у меня есть три строковые переменные ...

- (void) viewDidLoad{

  current =[[NSString alloc] retain];

  current=[[NSUserDefaults standardUserDefaults] valueForKey:@"Total"]];



  NSString *newCurrent=[NSString stringWithFormat:@"$ %@",current];

  textViewer.text=newCurrent;

 NSLog(@"%@",current);

}

- (IBAction) buttonDigitPressed: (id) отправитель {

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;  

} Ошибка 1-й раз, когда она работает нормально, но

когда я вызываю его во второй раз, ток указывает на какое-то значение, отформатированное по стандартному времени, иногда указывает на какое-то значение имени файла,

Ошибка: EXC BAD ACCESS
Когда я делаю это без newCurrent, значит, не добавляя письмо, оно работает нормально.

------- решено ---------------- каждый худойс моим кодом g все в порядке, я просто должен исправить [сохранение текущего]; везде, где я добавляю строку к текущему.

Когда я получаю ошибку, EXC BAD ACCESS означает, что яимел в виду объект, который был выпущен ранее.Итак, я сохранил Объект вместо.

Ответы [ 4 ]

0 голосов
/ 31 августа 2011

Здесь много вопросов.

  1. у вас есть утечка памяти в вашем viewDidLoad, когда вы устанавливаете current = для недавно выделенного объекта, а затем заменяете его на @ "20";Вы потеряли указатель на выделенную память.правильный способ сделать это - просто удалить строку alloc.
  2. у вас возникает другая утечка памяти при установке newCurrent = [newCurrent stringByAppendingString: current];по той же причине, что и 1.

Вам нужно либо лучше управлять своей памятью, либо просто использовать NSMutableStrings.Измените current на NSMutableString, выделите / инициализируйте его в вашем init или viewDidLoad, а затем просто используйте [current appendString:str];

на основе вставленного вами кода, и я сделаю следующее.интерфейс объявляет свойство

@property (nonatomic, retain) NSString *current;

в вашем @implementation @synthesize it

@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;
}
0 голосов
/ 31 августа 2011

Привет Арпит,

Вы можете объявить свойство nsstring в файле .h и синтезировать его в файле .m, поэтому я думаю, что это поможет вам.

.h файл

@property (nonatomic,retain) 
NSString *current;

.m файл

@synthesize current;
0 голосов
/ 31 августа 2011

Попробуйте этот код (без утечек памяти):

-(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];   
}
0 голосов
/ 31 августа 2011

нет необходимости выделять или сохранять строку в обоих случаях.

в viewdidload
s = [[NSString alloc] init];
s = @ "a";

при нажатии кнопки

NSString *newStr = [NSString stringWithFormat:@"b"];
s = [s stringByAppendingString:newStr];
NSLog(@"s is :%@",s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...