Сравнение двух строк в target-c приводит к закрытию приложения - PullRequest
0 голосов
/ 27 января 2011

Я пытаюсь сравнить две строки, используя "isEqualToString", и я не могу заставить его работать. Как только он начинает выполнять оператор if, он закрывает приложение. Я совершенно уверен, что строки на самом деле равны друг другу, и, несмотря на все мои попытки, у меня нет идей. Любая помощь будет оценена.

-(void)createTextfields{
    name = [[UITextField alloc] initWithFrame:CGRectMake(10, 0, 140, 25)];
    name.borderStyle = UITextBorderStyleRoundedRect;
    name.textColor = [UIColor blackColor];
    name.placeholder = @"Password";
    name.textAlignment = UITextAlignmentCenter;
    [self addSubview:name];

    entry = [[UITextField alloc] initWithFrame:CGRectMake(170, 0, 140, 25)];
    entry.borderStyle = UITextBorderStyleLine;
    entry.textColor = [UIColor blueColor];
    entry.textAlignment = UITextAlignmentCenter;
    [self addSubview:entry];
}

-(void)createSubmitButton{
    UIButton *submit = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    submit.titleLabel.textAlignment = UITextAlignmentCenter;
    [submit setTitle:@"Submit" forState:UIControlStateNormal];
    submit.frame = CGRectMake(90, 50, 60, 30);
    [submit addTarget:self action:@selector(runSubmit) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:submit];


    UIButton *savePass = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    savePass.titleLabel.textAlignment = UITextAlignmentCenter;
    [savePass setTitle:@"Save" forState:UIControlStateNormal];
    savePass.frame = CGRectMake(20, 50, 60, 30);
    [savePass addTarget:self action:@selector(save) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:savePass];
}

-(void)save{

    tempPass = name.text;
    name.text = @"";
    entry.text = tempPass;

}

-(void)runSubmit{

//  password = name.text;

    if ([tempPass isEqualToString:name.text]) {
        //[viewController displayAlertFromViewControl];
    }else {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Correct" message:@"Alert" delegate: self cancelButtonTitle:@"Close" otherButtonTitles: nil];
        [alert show];
        [alert release];
    }


}

Ответы [ 3 ]

5 голосов
/ 27 января 2011

Возможно, одна из ваших строк (уверен, что это tempPass) автоматически освобождена

2 голосов
/ 27 января 2011

Где объявляется tempPass? Возможно ли, что оно не сохраняется достаточно долго, чтобы на него можно было ссылаться в if?

1 голос
/ 27 января 2011

Если вы запустите свою программу с помощью этого пункта меню: Выполнить -> Запустить с Performance Tool -> Zombies, то Instruments выполнит всю тяжелую работу по поиску проблемы за вас.Он покажет вам, какой объект был выпущен раньше и где он был выделен.

Вероятно, это tempPass.Как только вы определите, так ли это, лучше всего сделать tempPass свойством с атрибутом copy, а затем использовать self.tempPass = name.text вместо просто tempPass = name.text.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...