9

Ich habe eine iOS App mit einem UIAlertController in Form eines Aktionsblatts, das in meiner App angezeigt wird, wenn der Benutzer auf eine Schaltfläche klickt.UIAlertAction Abschlussblock nicht aufgerufen - iOS

Alles funktioniert gut, abgesehen von einer Sache, die Completion-Blöcke werden nicht aus irgendeinem Grund aufgerufen.

Hier ist mein Code:

// 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]; 

Wenn Sie diesen Code ausführen erhalten Sie die Linie sehen, die die Steuerung wird nicht ausgeführt und weder wird die NSLog Anweisung innerhalb sie entlässt. Wenn Sie jedoch die NSLog löschen und den Completion-Block auf Null setzen, dann läuft es .... warum ???

Danke für Ihre Zeit, Dan.

Antwort

34

Versuchen Sie nicht, den Alarmcontroller zu schließen. Wenn der Handler Ihrer Alert-Aktion aufgerufen wird, wird er für Sie zurückgewiesen.

ändern Sie die "Abbrechen" Aktion:

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

Warum die down vote? Wenn etwas mit der Antwort nicht stimmt, erkläre zumindest, was das Problem ist. – rmaddy

+2

Ich weiß nicht, wer dich gewählt hat, aber ich stimme deine Antwort ab und ticke sie, weil sie mein Problem perfekt gelöst hat, danke. Wenn ich darüber nachdenke, weiß ich nicht, warum ich den Eindruck hatte, dass ich den Alarm-Controller sowieso entlassen muss. – Supertecnoboff

+0

Upvoted weil es mir geholfen hat und weil ich auch vorher ohne Angabe von Gründen abgesagt wurde. SO sollte einen Grund benötigen, auf einem Downvote gegeben zu werden. – Alyoshak

2

Die "Abbrechen" Aktion sollte nicht den View-Controller entlassen, wie durch rmaddy erwähnt. Doch selbst wenn die „Abbrechen“ Aktion ist eingestellt auf:

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

Sie das gleiche Problem mit dem Abschluss Block sehen können nicht genannt werden. Zum Beispiel der Umsetzung dieser (etwas gekünstelt) Methode:

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

auch diese Wirkung haben könnte, weil die UIAlertController entlassen werden, bevor der Abschluss-Block aufgerufen wird.

Verwandte Themen