Ich habe verschiedene Möglichkeiten ausprobiert, UIAlertController anstelle von UIAlertView zu verwenden. Ich habe verschiedene Möglichkeiten ausprobiert, aber ich kann die Alarmaktion nicht zum Laufen bringen. Hier ist mein Code, der unter IOS 8 und IOS 9 einwandfrei funktioniert, aber mit veralteten Flags angezeigt wird. Ich habe den eleganten Vorschlag unten ausprobiert, kann ihn aber in diesem Zusammenhang nicht zum Funktionieren bringen. Ich muss meine App einreichen und dies ist das Letzte, was ich ansprechen muss. Vielen Dank für weitere Vorschläge. Ich bin ein Neuling.
#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];
}
}
Antworten:
Ab iOS8 bietet Apple eine neue
UIAlertController
Klasse an, die Sie anstelle von UIAlertView verwenden können, das jetzt veraltet ist. Dies wird auch in der Verfallsmeldung angegeben:Sie sollten also so etwas verwenden
quelle
[alert dismissViewControllerAnimated:YES completion:nil];
aus den Aktionshandlern zu entfernen , da die Warnung ohne diesen Code automatisch ausgeblendet wird. Außerdem kann man fälschlicherweise Code in den Vervollständigungsblock einfügen, der nicht ausgeführt wird. Prost :)Wenn Sie diese Warnung in der NSObject-Klasse verwenden möchten, sollten Sie Folgendes verwenden:
quelle
Die schnelle Version der neuen Implementierung lautet:
quelle
Xcode 8 + Swift
Angenommen,
self
ist einUIViewController
:quelle
UIAlertController + AlertController.h
UIAlertController + AlertController.m
in Ihrem ViewController.m
quelle
Verwenden Sie UIAlertController anstelle von UIAlertView
quelle
Ich habe die oben genannten Methoden ausprobiert, und niemand kann die Warnansicht nur anzeigen, wenn ich die
presentViewController:
Methode in einendispatch_async
Satz setze :dispatch_async(dispatch_get_main_queue(), ^ { [self presentViewController:alert animated:YES completion:nil]; });
Siehe Alternative zu UIAlertView für iOS 9? .
quelle
quelle
Überprüfen Sie dies:
quelle
[self showAlert];
// Methode aufrufenquelle