views:

32

answers:

1

i have an if statement comparing two NSStrings, one is user input from a UITextField the other is a NSString created from random integers between 0-9 inclusive, however the comparison is failing everytime even thought they are the same which is shown in the log from an NSLog call. so can anyone see anything i'm doing wrong in the supplied code?

-(void) generateDecryptionCode{
    codeToConfirm = [NSString stringWithFormat:@"%i%i%i%i%i%i", arc4random()%10, arc4random()%10, arc4random()%10, arc4random()%10, arc4random()%10, arc4random()%10];
    numberToDecrypt.text = codeToConfirm;
}
- (void) decryptTimerFires{
    NSURL *beep = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/Beep.aif", [[NSBundle mainBundle] resourcePath]]];
    NSURL *buzz = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/Buzz.aif", [[NSBundle mainBundle] resourcePath]]];
        if(decryptTime > 0){
            decryptTime--;
            decryptLabel.text = [NSString stringWithFormat:@"%g",  (float)decryptTime/10];
        if(decryptTime%10 == 0){
            audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:beep error:nil];
            audioPlayer.numberOfLoops = 1;
            [audioPlayer play];
        }
    }
    else{
        audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:buzz error:nil];
        audioPlayer.numberOfLoops = 1;
        [audioPlayer play];
        [decryptTimer invalidate];
        decryptTimer = nil;
    }

}
-(void) stopDecrypt{
    NSLog(@"Stop Decrypt");
    [decryptTimer invalidate];
    decryptTimer = nil;

}
-(IBAction)decrypt{
    [self generateDecryptionCode];
    decryptTime = 200;
    decryptTimer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(decryptTimerFires) userInfo:nil repeats:YES];
    [decryptTimer fire];

}
- (void)dealloc {
    [decryptLabel release];
    [decryptButton release];
    [crackLabel release];
    [crackButton release];
    [numberToCrack release];
    [numberToDecrypt release];
    [audioPlayer release];
    [super dealloc];
}

-(void) enterDecryptKey{
    confirm = [[UIAlertView alloc] initWithTitle:@"Confirm Code" message:@"Please Input The Correct Code:"  delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Confirm Code", nil];
    inputCode = [[UITextField alloc] initWithFrame:CGRectMake(12, 45, 260, 25)];
    CGAffineTransform myTransform = CGAffineTransformMakeTranslation(0, 60);

    [confirm setTransform:myTransform];
    [inputCode setBackgroundColor:[UIColor whiteColor]];
    [confirm addSubview:inputCode];
    [confirm show];
    [confirm release];
}


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
   NSLog(@"Enter code:");
    if(buttonIndex == 0){
        [confirm dismissWithClickedButtonIndex:0 animated:YES];
    }
    else if(buttonIndex == 1){
        NSLog(@"Code:%@/User Input:%@",codeToConfirm, inputCode.text);
        NSLog(@"comparing code...");
        if (inputCode.text == codeToConfirm) {
            NSLog(@"Code Correct");
            [self stopCrack];
            [self stopDecrypt];
        }
    }
}

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
{
    [inputCode resignFirstResponder];
    [inputCode removeFromSuperview];  
    [inputCode release];  
}
+3  A: 

You should compare the strings with - (BOOL) isEqualToString or - (BOOL) isEqual == will return only true if the two pointer point to the same address

Harald Scheirich
thank you so much this has been bugging me all afternoon, i didn't realize that == worked that way.
Joe