2009-11-05 4 views
0

Mon application plante, je pense, dans RootController.m et je ne sais pas pourquoi. Cela se produit quand je suis dans un contrôleur de vue et que j'appuie sur le bouton de retour. Il retourne brièvement à RootController puis il plante. Il n'y a pas de messages sur la console. Je ne pense pas que ce soit le ViewController car j'en ai essayé plus d'un.Retour à RootController se bloque mon application

Voici le code.

#import "confirmViewController.h" 


    @implementation confirmViewController 

    @synthesize lblStatus; 
    @synthesize lblCardType; 
    @synthesize lblCardNumber; 
    @synthesize lblExpires; 
    @synthesize lblAmount; 
    @synthesize lblApproval; 

    @synthesize strConfirmation; 
    @synthesize strCardNumber; 
    @synthesize strExpires; 
    @synthesize strAmount; 
    @synthesize strApproval; 

/* 
// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     // Custom initialization 
    } 
    return self; 
} 
*/ 


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    //prepare confirmation, all that is needed is the first string  
    NSArray *strings = [strConfirmation componentsSeparatedByString: @","]; 
    NSString *strPreParsed = [strings objectAtIndex:0]; 

    //break out yes/no so we can set status 
    //NSString *strYesNO = [strPreParsed substringToIndex:2]; 
    NSString *strYesOrNo = [strPreParsed substringWithRange: NSMakeRange(1, 1)]; 

    //save approval for later 
    strApproval = strYesOrNo; 

    //debug 
     NSLog(@"strNo= %@",strYesOrNo); 
     NSLog(@"strPreParsed= %@", strPreParsed); 


    if([strYesOrNo compare:@"Y"] == NSOrderedSame) 
    { 
     lblStatus.text = @"Approved"; 
     lblStatus.textColor = [UIColor greenColor]; 
    } 

    if([strYesOrNo compare:@"N"] == NSOrderedSame) 
    { 
     lblStatus.text = @"Declined"; 
     lblStatus.textColor = [UIColor redColor]; 
    } 

    if([strYesOrNo compare:@"U"] == NSOrderedSame) 
    { 
     lblStatus.text = @"Try Again"; 
     lblStatus.textColor = [UIColor redColor]; 
    } 

    //set card type 
    if([lblCardNumber.text compare:@"4"] == NSOrderedSame) 
    { 
     lblCardType.text = @"Visa"; 
    } 

    if([lblCardNumber.text compare:@"5"] == NSOrderedSame) 
    { 
     lblCardType.text = @"Master"; 
    } 

    if([lblCardNumber.text compare:@"6"] == NSOrderedSame) 
    { 
     lblCardType.text = @"Discover"; 
    } 



    //set cardnumber 
    lblCardNumber.text = strCardNumber; 

    //set expires 
    lblExpires.text = strExpires; 

    //set amount 
    lblAmount.text = strAmount; 

    //set approval string 
    lblApproval.text = strPreParsed; 


} 


/* 
// Override to allow orientations other than the default portrait orientation. 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
*/ 

- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 

    //show signature 
    sigCaptureViewController *yetAnotherViewController = [[sigCaptureViewController alloc] initWithNibName:@"sigCaptureView" bundle:nil]; 
    [self.navigationController pushViewController:yetAnotherViewController animated:YES]; 
    [yetAnotherViewController release]; 

} 


- (void)dealloc { 
    [super dealloc]; 

    [lblCardType dealloc]; 
    [lblCardNumber dealloc]; 
    [lblExpires dealloc]; 
    [lblAmount dealloc]; 
    [lblApproval dealloc]; 
    [lblStatus dealloc]; 

    [strConfirmation dealloc]; 
    [strCardNumber dealloc]; 
    [strExpires dealloc]; 
    [strAmount dealloc]; 
    [strApproval dealloc]; 
} 


@end 
+0

Avez-vous une trace de pile? – bradheintz

Répondre

1

Vous êtes probablement quelque chose deux fois dans publiez votre SalesViewController, il est quand on s'écraser appelé le dealloc de cet objet et de faire la 2ème version.

Vous ne avez pas inclus le code qui contorller, soit chercher par vous même ou le coller ici et je vais vous aider vous le repérer :)

Voici un scénario que vous devez rechercher:

// somewhere within your sales controller 
- (void)someWhere { 
    NSArray *arr = [NSArray array]; 
    self.myArray = arr; 
    [arr release]; // notice how arr wasn't initialized with an init 
    // so no release is required 
    // but since your myArray is a @property(retain) it won't crash here 
    // because the property did a retain 
} 

- (void)dealloc { 
    [myArray relase]; // this does the 2nd release and BOOM 
} 

Modifier après le collage de votre contrôleur de vue cible:

Il se peut que vous ayez oublié de définir l'une des propriétés que vous libérez dans le dealloc. Essayez de définir un point d'arrêt dans votre dealloc et de voir si l'une des propriétés est réellement nulle avant de la relâcher, si c'est le cas, c'est la raison pour laquelle elle se bloque. EDIT # 2, êtes-vous sûr de vouloir appeler le [lblSometing dealloc] au lieu de [lblSomething release]?

+0

Cela arrive aussi avec un autre contrôleur de vue. Celui-là est un peu plus court donc je vais le coller ci-dessous. Toute aide appréciée. –

Questions connexes