2014-11-03 4 views
3

почему UIAlertController в iOS7 получил нулевое значение, пока его нужно было представить, но работало в iOS8, было хорошо, могу ли я знать, что это потому, что iOS7 не поддерживает класс UIAlertController?Почему UIAlertController в iOS7 получил нулевое значение?

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

[self presentViewController:view animated:NO completion:nil]; 
+0

UIAlertController был представлен для iOS 8. Он не будет работать в iOS7. Для iOS7 вы должны использовать UIAlertView. – Sreejith

+0

http://stackoverflow.com/questions/25111011/uialertview-uialertcontroller-ios-7-and-ios-8-compatibility – Sreejith

+0

Я создал простой класс-оболочку, который можно использовать с обоими. Он имитирует UIAlertController. https://github.com/Reggian/RAAlertController – Reggian

ответ

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); 
} 
+0

, но я думаю, что проверить класс лучше, чем проверить версию системы? – Deeper

0

Вы можете использовать версию операционной системы менее 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]; 
    } 
} 
Смежные вопросы