Может ли appDelegate быть делегатом модального представления? - PullRequest
0 голосов
/ 05 сентября 2011

Я пытаюсь отобразить модальное представление «Условия предоставления услуг» при запуске моего приложения, когда в настройках параметров указано, что пользователь не принял условия использования.

Итак, в моем appDelegate в ApplicationDidFinishLaunchingWithOptions у меня есть этот код:

    if (TOSAcceptedPrefValue) { //has not been accepted
    // Create the root view controller for the navigation controller
    TermsOfServiceController *termsOfServiceController = [[TermsOfServiceController alloc]
                                                          initWithNibName:@"TermsOfServiceController" bundle:nil];

    // Create the navigation controller and present it modally.
    UINavigationController *navigationController = [[UINavigationController alloc]
                                                    initWithRootViewController:termsOfServiceController];

    termsOfServiceController.delegate = self;

    navigationController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:navigationController animated:YES];

    [navigationController release];
    [TermsOfServiceController release];

    NSLog(@"1");

}

Тем не менее, Xcode указывает, что termOfServiceController.delegate = self является «Присвоение« id »из несовместимого типа« MyAppAppDelegate * »».

Я думаю, что полностью реализую модальный протокол в своем заголовке AppDelegate:

@protocol TOSModalViewDelegate

- (void)didAcceptTermsOfService:(NSString *)message;
- (void)didRejectTermsOfService:(NSString *)message;

@end

@interface MyAppAppDelegate : NSObject <UIApplicationDelegate, TOSModalViewDelegate> ...

и в заголовке modalview:

@protocol ModalViewDelegate ;
@interface TermsOfServiceController : UIViewController {
id<ModalViewDelegate>   delegate; ...
...
@property (nonatomic, assign) id<ModalViewDelegate> delegate;

и я синтезирую его в файле реализации modalview.

Согласно этому примеру , я переместил свой код в файле AppDelegate.m, после того как окно было создано, но все еще получил предупреждение от Xcode.

Предупреждение приводит к падению приложения с этой ошибкой:

2011-09-05 08: 34: 12.237 MyApp [4416: 207] TOSAcceptedPrefValue = 0 2011-09-05 08: 34: 13.732 MyApp [4416: 207] displayWelcomeScreenPrefValue = 0 2011-09-05 08: 34: 42.889 MyApp [4416: 207] - [MyAppAppDelegate presentModalViewController: animated:]: нераспознанный селектор, отправленный экземпляру 0x552b430 2011-09-05 08: 34: 42.892 MyApp [4416: 207] *** Завершение работы приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '- [MyAppAppDelegate presentModalViewController: animated:]: нераспознанный селектор, отправленный экземпляру 0x552b430'

Итак, мой вопрос: возможно ли отобразить модальное представление из приложения appdelegate и, если да, что я должен изменить, чтобы это произошло.

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 05 сентября 2011

Ошибка в том, что MyAppAppDelegate не является подклассом UIViewController и поэтому не может обрабатывать presentModalViewController:animated:.

Так что нет, ваш представитель приложения не может представить modalViewController, он должен быть представлен реальным контроллером представления. Это не сложно сделать, просто создайте тот, который показывает ваши термины в viewDidLoad и отвечает соответствующим образом при выходе из модального контроллера, чтобы делать все, что вам нужно делать дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...