He probado varias formas de usar UIAlertController, en lugar de UIAlertView. Intenté de varias formas pero no puedo hacer que la acción de alerta funcione. Aquí está mi código que funciona bien en IOS 8 e IOS 9, pero aparece con indicadores obsoletos. Probé la elegante sugerencia a continuación, pero no puedo hacer que funcione en este contexto. Necesito enviar mi aplicación y esto es lo último que debo abordar. Gracias por cualquier otra sugerencia. Soy un 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];
}
}
Respuestas:
Desde iOS8, Apple proporciona una nueva
UIAlertController
clase que puede usar en lugar de UIAlertView, que ahora está en desuso, también se indica en el mensaje de obsolescencia:Entonces deberías usar algo como esto
fuente
[alert dismissViewControllerAnimated:YES completion:nil];
de los controladores de acciones, porque la alerta se oculta automáticamente sin este código. Además, se puede colocar por error un código en el bloque de finalización que no se ejecutará. Saludos :)Si desea usar esta alerta en la clase NSObject, debe usar como:
fuente
La versión rápida de la nueva implementación es:
fuente
Xcode 8 + Swift
Suponiendo que
self
es unUIViewController
:fuente
UIAlertController + AlertController.h
UIAlertController + AlertController.m
en su ViewController.m
fuente
Utilice UIAlertController en lugar de UIAlertView
fuente
Probé los métodos anteriores y nadie puede mostrar la vista de alerta, solo cuando pongo el
presentViewController:
método en unadispatch_async
oración:dispatch_async(dispatch_get_main_queue(), ^ { [self presentViewController:alert animated:YES completion:nil]; });
Consulte ¿ Alternativa a UIAlertView para iOS 9? .
fuente
fuente
Mira esto:
fuente
[self showAlert];
// método de llamadafuente