3

为什么 iOS7 中的 UIAlertController 在需要呈现但在 iOS8 中工作时收到 nil 值是好的,我可以知道这是因为 iOS7 不支持 UIAlertController 类吗?

UIAlertController *view=[UIAlertController
                        alertControllerWithTitle:@"Hello"
                        message:nil
                        preferredStyle:UIAlertControllerStyleAlert];

 [self presentViewController:view animated:NO completion:nil];
4

3 回答 3

4

这些类仅在 iOS8 及更高版本中可用。请参阅类参考

于 2014-11-03T08:10:14.997 回答
3

为了AlertView在两个iOS 8版本和更低版本中显示,您可以使用以下代码:

if ([self isiOS8OrAbove]) {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title
                                                                             message:message
                                                                      preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK"
                                                       style:UIAlertActionStyleDefault
                                                     handler:^(UIAlertAction *action) {
                                                         [self.navigationController popViewControllerAnimated:YES];
                                                     }];

    [alertController addAction:okAction];
    [self presentViewController:alertController animated:YES completion:nil];
} else {
    UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:title
                                                         message:message
                                                        delegate:nil
                                               cancelButtonTitle:@"OK"
                                               otherButtonTitles: nil];
    [alertView show];
    [self.navigationController popViewControllerAnimated:YES];
}

- (BOOL)isiOS8OrAbove {
    NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare: @"8.0"
                                                                       options: NSNumericSearch];
    return (order == NSOrderedSame || order == NSOrderedDescending);
}
于 2014-11-03T09:08:53.133 回答
0

您可能使用的 os 版本低于iOS 8

如果您使用 Xcode 6 编译代码并使用 iOS 版本 < 8.0 的设备,那么您将面临这个问题。我建议以下

- (void)showXYZAlert
{
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0"))
    {
        // Handle UIAlertController
        [self showXYZAlertController];
    }
    else
    {
        // Handle UIAlertView
        [self showXYZAlertControllerView];
    }
}
于 2015-02-02T11:21:31.380 回答