Ich versuche, Alarmaktionen in einem Array an eine Funktion zu übergeben, die die UIAlertController-Konfiguration in einer einzigen Zeile vereinfacht. Ich bin in der Lage, Schaltflächenüberschriften, aber keine Warnaktionen erfolgreich zu übergeben. Hier ist was ich mache.Übergabe von Sperren/Blöcken im Array als Parameter iOS
+(void)showAlertWithTitle:(NSString*)title
message:(NSString*)alertmessage
buttonTitles:(NSArray*)buttonTitles
buttonActions:(NSArray*)buttonActions
inViewController:(UIViewController*)viewController {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:alertmessage preferredStyle:UIAlertControllerStyleAlert];
[buttonTitles enumerateObjectsUsingBlock:^(NSString* buttonTitle,NSUInteger idx,BOOL *stop){
UIAlertAction *action = [UIAlertAction actionWithTitle:buttonTitle style:UIAlertActionStyleDefault handler: [[buttonActions objectAtIndex:idx] copy]]; //blocks should always be copied to heap from stack else they will crash
[alert addAction:action];
}];
[viewController presentViewController:alert animated:YES completion:nil];
}
Die obige Codedatei wurde lange zurück geschrieben, so dass es in Ziel c. Ich habe einige neue Dateien geschrieben, die in swift sind und ich rufe die obige Methode in swift wie unten auf.
CommonManager.showAlert(withTitle: "", message: "Feedback Sent",
buttonTitles: ["Ok"], buttonActions: [ { (action: UIAlertAction) in
print("you pressed Ok alert button");
// call method whatever u need
}], in: self)
Wenn ich die Schließung passieren nicht, dass es funktioniert gut, wenn die Schließung vorbei, wenn Sie auf Ok stürzt. Ich fand auch, dass wir einen Block kopieren müssen, wenn er als eine Sammlung übergeben wurde, und ich tat das, aber etwas ist immer noch nicht richtig, was ich nicht herausfinden kann. Kannst du mir sagen, was ich hier machen soll?
Dank
Diese Lösung für mich gearbeitet, dank @newacct –