2015-07-08 2 views
2

Я знаю, что это очень простой вопрос, и я работаю над ним с 3-х часов, но не смог заставить его работать. Я пытаюсь реализовать UIAlertController, чтобы показать сообщение об ошибке, используя Apple documentation, но я получаю ошибку на этой строке, что ни один известный метод класса для селектора presentViewController [self presentViewController:alert animated:YES completion:nil]; Я искал и получил много решений, но никто не работает здесь. AlertMessageViewController - это мой пользовательский класс, который унаследован от UIViewController.Неизвестный метод класса для селектора presentViewController в UIAlertController

AlertMessageViewController.h 

#import <UIKit/UIKit.h> 
@interface AlertMessageViewController : UIViewController 
+(instancetype)showAlert: (NSString *) title withMessage: (NSString*) message preferredStyle:(UIAlertControllerStyle)preferredStyle; 
@end 

AlertMessageViewController.m 

#import "AlertMessageViewController.h" 
#import <UIKit/UIKit.h> 
@interface AlertMessageViewController() 
@end 
@implementation AlertMessageViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
} 
+(instancetype)showAlert: (NSString *) title withMessage: (NSString*) message preferredStyle:(UIAlertControllerStyle)preferredStyle 
{ 

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"title" message:@"alertMessage" preferredStyle:UIAlertControllerStyleAlert]; 
    UIAlertAction *ok =[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){NSLog(@"ok action");}]; 
    [alert addAction:ok]; 
    [self presentViewController:alert animated:YES completion:nil]; 
} 

@end 
+0

Почему вы расширили свой AlertMessaveViewController с помощью UIViewController? и как вы используете этот класс и метод. Неудивительно, что вы получили сообщение об ошибке. – Samir

+0

Причина UIAlertController унаследован от UIViewController. Я прокомментировал ответы uros19, что, как я это называю. –

ответ

6

Почему ваш тип возврата для showAlert: метод instancetype? И вы ничего не вернули, это должно быть недействительным.

EDIT: Кроме того, ваш метод не должен быть метод класса

это должно работать:

-(void)showAlert: (NSString *) title withMessage: (NSString*) message preferredStyle:(UIAlertControllerStyle)preferredStyle 
{ 

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"title" message:@"alertMessage" preferredStyle:UIAlertControllerStyleAlert]; 
    UIAlertAction *ok =[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){NSLog(@"ok action");}]; 
    [alert addAction:ok]; 
    [self presentViewController:alert animated:YES completion:nil]; 
} 

UPDATE: Хорошо попробовать это:

+(UIAlertController*)alertWithTitle: (NSString *) title withMessage: (NSString*) message preferredStyle:(UIAlertControllerStyle)preferredStyle 
{ 

UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:message preferredStyle: preferredStyle]; 
UIAlertAction *ok =[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){NSLog(@"ok action");}]; 
[alert addAction:ok]; 
return alert; 
} 
    } 

Затем, когда вы хотите показать это, назовите это так:

[self presentViewController:[AlertMessageViewController alertWithTitle:@"Title" withMessage:@"Message" preferredStyle:UIAlertControllerStyleAlert] animated:YES completion:NULL]; 
+0

получение той же ошибки с возвратом типа void тоже. –

+0

Отметить обновленный ответ – Uros19

+0

дать ошибку во время выполнения –