Eu tentei várias maneiras de usar UIAlertController, em vez de UIAlertView. Tentei de várias maneiras, mas não consigo fazer a ação de alerta funcionar. Aqui está meu código que funciona bem no IOS 8 e IOS 9, mas está aparecendo com sinalizadores obsoletos. Tentei a sugestão elegante abaixo, mas não consigo fazer funcionar neste contexto. Preciso enviar meu aplicativo e essa é a última coisa a ser resolvida. Obrigado por quaisquer sugestões adicionais. Eu sou um novato
#pragma mark - BUTTONS ================================
- (IBAction)showModesAction:(id)sender {
NSLog(@"iapMade: %d", iapMade3);
// IAP MADE ! ===========================================
if (!iapMade3) {
//start game here
gamePlaysCount++;
[[NSUserDefaults standardUserDefaults]setInteger:gamePlaysCount forKey:@"gamePlaysCount"];
NSLog(@"playsCount: %ld", (long)gamePlaysCount);
if (gamePlaysCount >= 4) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Basic"
message: THREE_PLAYS_LIMIT_MESSAGE
delegate:self
cancelButtonTitle:@"Yes, please"
otherButtonTitles:@"No, thanks", nil];
[alert show];
NSString *path = [[NSBundle mainBundle] pathForResource:@"cow" ofType:@"wav"];
_pop =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
[_pop play];
[self dismissViewControllerAnimated:true completion:nil];
} else {
if (gamePlaysCount == 1) {
// Create & store the next 5 mins when player gets 3 more lives
nextDateToPlay = [[NSDate date] dateByAddingTimeInterval:60*60*0.1];
NSLog(@"CURRENT DATE: %@", [NSDate date]);
NSLog(@"NEXT DAY: %@", nextDateToPlay);
[[NSUserDefaults standardUserDefaults]setObject: nextDateToPlay forKey:@"nextDateToPlay"];
NSLog(@"nextDateToPlay: %@", nextDateToPlay);
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Basic"
message: THREE_PLAYS_LIMIT_MESSAGE2
delegate:self
cancelButtonTitle:@"Got it!"
otherButtonTitles:@"Start", nil];
[alert show];
} else {
if (gamePlaysCount == 3) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Basic"
message: THREE_PLAYS_LIMIT_MESSAGE3
delegate:self
cancelButtonTitle:@"Yep, I Know!"
otherButtonTitles:@"Start", nil];
[alert show];
}
}
}
}
}
// IAP NOT MADE =============================
#pragma mark - ALERTVIEW DELEGATE ============================
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if ([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString:@"Yes, please"]) {
UIStoryboard *storyboard = self.storyboard;
MenuViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"Store"];
svc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:svc animated:YES completion:nil];
}
}
Respostas:
No iOS8, a Apple fornece uma nova
UIAlertController
classe que você pode usar em vez de UIAlertView, que agora está obsoleto, também é declarado na mensagem de suspensão:Então você deve usar algo assim
fonte
[alert dismissViewControllerAnimated:YES completion:nil];
dos manipuladores de ações, porque o alerta se esconde automaticamente sem esse código. Além disso, pode-se colocar por engano um código no bloco de conclusão que não será executado. Saúde :)Se você quiser usar este alerta na classe NSObject, você deve usar como:
fonte
A versão rápida da nova implementação é:
fonte
Xcode 8 + Swift
Supondo que
self
sejaUIViewController
:fonte
UIAlertController + AlertController.h
UIAlertController + AlertController.m
em seu ViewController.m
fonte
Use UIAlertController em vez de UIAlertView
fonte
Eu tentei os métodos acima, e ninguém consegue mostrar a visualização de alerta, apenas quando eu coloco o
presentViewController:
método em umadispatch_async
frase:dispatch_async(dispatch_get_main_queue(), ^ { [self presentViewController:alert animated:YES completion:nil]; });
Consulte Alternativa para UIAlertView para iOS 9? .
fonte
fonte
Verifique isto:
fonte
[self showAlert];
// método de chamadafonte