Важный вопрос о NSString - PullRequest
1 голос
/ 22 июля 2010

Проблема в том, что после того, как я нажму 2 кнопки, приложение вылетает, и я не могу понять, почему

Button1 подключен к button1 Button2 подключен к button2 ... Button5 подключен к button5

Что я делаю не так?

По сути, я хочу проверить, правильно ли введена последовательность # (55235)

В моем файле AppDelegate.H я определилпеременная с именем

NSString * myEasterEgg;

В AppDelegate.M у меня есть 5 кнопок, которые правильно подключены, и у каждой кнопки есть свой собственный метод

-(IBAction)button1:(id)sender
{
if(CFStringCompare((CFStringRef)myEasterEgg, (CFStringRef)@"52235", 1) == 0)
{
myEasterEgg = @"";
} else {
myEasterEgg = [myEasterEgg stringByAppendingString:@"1"];
}
}

-(IBAction)button2:(id)sender
{
if(CFStringCompare((CFStringRef)myEasterEgg, (CFStringRef)@"52235", 1) == 0)
{
myEasterEgg = @"";
} else {
myEasterEgg = [myEasterEgg stringByAppendingString:@"2"];
}
}

-(IBAction)button3:(id)sender
{
if(CFStringCompare((CFStringRef)myEasterEgg, (CFStringRef)@"52235", 1) == 0)
{
myEasterEgg = @"";
} else {
myEasterEgg = [myEasterEgg stringByAppendingString:@"3"];
}
}

-(IBAction)button4:(id)sender
{
if(CFStringCompare((CFStringRef)myEasterEgg, (CFStringRef)@"52235", 1) == 0)
{
myEasterEgg = @"";
} else {
myEasterEgg = [myEasterEgg stringByAppendingString:@"4"];
}
}

-(IBAction)button5:(id)sender
{
if(CFStringCompare((CFStringRef)myEasterEgg, (CFStringRef)@"52235", 1) == 0)
{
myEasterEgg = @"";
} else {
myEasterEgg = [myEasterEgg stringByAppendingString:@"5"];
}
}

-(void)viewDidLoad
{
myEasterEgg = [[NSString alloc] initWithString:@""];
}

1 Ответ

1 голос
/ 22 июля 2010

Вы пропускаете исходную строку и заменяете ее новыми значениями, не сохраняя их.Сбой происходит из-за того, что вы вызываете [myEasterEgg stringByAppendingString:…] по висячему указателю, то есть переменной, которая больше не ссылается на какой-либо объект.См. Руководство по программированию управления памятью для получения дополнительной информации.

...