J'ai 2 alertes que je veux présenter dans différents cas, j'ai écrit une fonction générale pour init les alertes au début et changer les messages plus tard, mais quand j'essaye de présenter l'alerte, j'obtiens un crash. Lorsque j'inspecte le notesAlert au runtime, il est toujours nul.

Quelqu'un peut-il expliquer ce que j'ai fait de mal?

    @interface viewController (){
        UIAlertController *tableAlert;
        UIAlertController *notesAlert;
    }
    @end

    @implementation viewController
    
    - (void)viewDidLoad {
       [super viewDidLoad];
       [self initAlert:tableAlert];
       [self initAlert:notesAlert];
    }
    
// func to init the alerts
    -(void)initAlert:(UIAlertController*)alert{
        alert = [UIAlertController alertControllerWithTitle: @"" message: @"" preferredStyle:UIAlertControllerStyleActionSheet];
        [alert setModalPresentationStyle:UIModalPresentationPopover];
        [alert.popoverPresentationController setSourceView:self.view];
        
        UIPopoverPresentationController *popover = [alert popoverPresentationController];
        CGRect popoverFrame = CGRectMake(0,0, self.view.frame.size.width/2, self.view.frame.size.width/2);
        popover.sourceRect = popoverFrame;
        UIAlertAction *dismiss = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:nil];
        [alert addAction:dismiss];
    }
    
    - (IBAction)showNotes:(id)sender {
        
// here the notesAlert is still nil
            [notesAlert setTitle:@"oops"];
            [notesAlert setMessage:@"you pressed the wrong one"];
    
        [self presentViewController:notesAlert animated:YES completion:nil];
    
    }
    @end
0
Mor Goren 11 mars 2021 à 16:14

1 réponse

Meilleure réponse

[self initAlert: notesAlert]; ne crée pas notesAlert. À la place, vous pouvez utiliser notesAlert = [self initAlert];

Peut-être quelque chose comme ça:

@interface ViewController () {
    UIAlertController *tableAlert;
    UIAlertController *notesAlert;
}
@end

@implementation ViewController

- (void)viewDidLoad {
   [super viewDidLoad];
   self.tableAlert = [self initAlert];
   self.notesAlert = [self initAlert];
}

// func to init the alerts
- (UIAlertController *) initAlert {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle: @"" message: @"" preferredStyle: UIAlertControllerStyleActionSheet];
    [alert setModalPresentationStyle:UIModalPresentationPopover];
    [alert.popoverPresentationController setSourceView: self.view];
    
    UIPopoverPresentationController *popover = [alert popoverPresentationController];
    CGRect popoverFrame = CGRectMake(0,0, self.view.frame.size.width/2, self.view.frame.size.width/2);
    popover.sourceRect = popoverFrame;
    UIAlertAction *dismiss = [UIAlertAction actionWithTitle: @"Ok" style: UIAlertActionStyleDefault handler:nil];
    [alert addAction: dismiss];

    return alert;
}
1
koen 11 mars 2021 à 19:08