2015-08-31 1 views
0

Après avoir enregistré quelque chose à des données de base, je voudrais montrer une alerte remerciant l'utilisateur. Lorsque l'utilisateur clique sur OK, je voudrais alors rejeter le contrôleur de vue modale à partir duquel la sauvegarde est effectuée.ios/xcode: UIAlert Pas d'action d'arrêt et de cliquer sur OK écrasant l'application

Toutefois, l'alerte n'arrête pas le rejet du contrôleur et, plus encore, lorsque vous cliquez sur OK, l'application est bloquée. Ma compréhension est que ces accidents peuvent se produire lorsque le contrôleur n'existe plus. Dans ce cas, cependant, je lance l'alerte avant de rejeter le contrôleur.

Quelqu'un peut-il repérer ce qui ne va pas?

J'apprécierais toutes les suggestions.

code:

if ([self.managedObjectContext save:&error]) { 
      [self fireAlert]; 
      // Dismiss View Controller 
      [self dismissViewControllerAnimated:YES completion:nil]; 

     } else { 
      if (error) { 
       NSLog(@"Unable to save record."); 
       NSLog(@"%@, %@", error, error.localizedDescription); 
      } 
     } 

-(void) fireAlert { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Thank you!" message:@"We appreciate your feedback" delegate:self 
               cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

    [alert show]; 
} 

Répondre

1

Vous licencient le contrôleur d'affichage afin delegate:self provoquant l'accident car après

[self dismissViewControllerAnimated:YES completion:nil]; 

self n'est plus disponible. Il est désalloué et l'envoi d'un message à l'objet libéré provoque le crash. Essayez de créer delegate:nil si vous ne souhaitez pas utiliser les méthodes de délégation UIAlertView.

ou de l'utilisation des méthodes délégués, assurez-vous que vous avez UIViewController <UIAlertViewDelegate>

puis faire

if ([self.managedObjectContext save:&error]) { 
      [self fireAlert]; 

     } else { 
      if (error) { 
       NSLog(@"Unable to save record."); 
       NSLog(@"%@, %@", error, error.localizedDescription); 
      } 
     } 

-(void) fireAlert { 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Thank you!" message:@"We appreciate your feedback" delegate:self 
               cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

    [alert show]; 
} 
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    // Dismiss View Controller 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 
+0

délégué nul fixe elle. Je vais corriger dès qu'il me le permet. THX! – user1904273