9

Mam aplikację na iOS z UIAlertController w postaci arkusza akcji prezentowanego w mojej aplikacji, gdy użytkownik klika przycisk.Blok UIAlertAction nie został wywołany - iOS

Wszystko działa świetnie, z jednej strony bloki zakończenia nie są wywoływane z jakiegoś powodu.

Oto mój kod:

// Setup the alert information/type. 
UIAlertController *action_view = [UIAlertController alertControllerWithTitle:@"Test title" message:@"test message" preferredStyle:UIAlertControllerStyleActionSheet]; 

// Create and add the cancel button. 
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Dismiss" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) { 

    [action_view dismissViewControllerAnimated:YES completion:^{ 
     NSLog(@"asdhfgjk"); 
    }]; 
}]; 

// Add the action button to the alert. 
[action_view addAction:cancel]; 

// Present the alert to the user. 
[self presentViewController:action_view animated:YES completion:nil]; 

Po uruchomieniu tego kodu widać linię, która oddala kontroler przyzwyczajenie biegać i nie będzie oświadczenie wewnątrz niego NSLog. Jednak jeśli usuniesz NSLog i ustawisz blok zakończenia na zero, to działa .... dlaczego ???

Dziękuję za poświęcony czas, Dan.

Odpowiedz

34

Nie należy podejmować prób zwolnienia kontrolera alertów. Zostanie on usunięty za Ciebie do czasu wywołania funkcji obsługi alertu.

Zmiana „anuluj” działania mające na celu:

UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Dismiss" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) { 
    NSLog(@"asdhfgjk"); 
}]; 
+1

Dlaczego głosowanie w dół? Jeśli coś jest nie tak z odpowiedzią, przynajmniej wyjaśnij, na czym polega problem. – rmaddy

+2

Nie wiem, kto głosował na ciebie, ale głosuję twoją odpowiedź w górę i zaznaczam to, ponieważ to rozwiązało mój problem doskonale, dziękuję. Pomyśl o tym, nie wiem, dlaczego miałem wrażenie, że muszę powiedzieć, żeby zrezygnować z kontrolera alarmów. – Supertecnoboff

+0

Wycofano, ponieważ pomógł mi, a także dlatego, że zostałem cofnięty wcześniej bez podawania przyczyny. W związku z tym należy wymagać podania uzasadnienia. – Alyoshak

2

„Anuluj” akcja nie powinien oddalić widok kontrolera jak wspomniano przez rmaddy. Jednakże, nawet jeśli „anuluj” akcja jest ustawiona na:

UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Dismiss" style:UIAlertActionStyleCancel handler:^(UIAlertAction * action) { 
NSLog(@"asdhfgjk");}]; 

można zobaczyć ten sam problem z blokiem zakończenia nie miano. Na przykład, wprowadzenie tej metody (nieco contrived):

- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion { 
    [[self presentedViewController] dismissViewControllerAnimated:flag completion:nil]; 
} 

może również mieć ten skutek, ponieważ UIAlertController zostanie odwołany przed blok ukończenie jest tzw.

Powiązane problemy