appDelegate可以成为模态视图委托吗?

时间:2011-09-05 13:58:04

标签: ios xcode compiler-warnings modalviewcontroller

当我的应用程序启动时,当设置首选项指示用户未接受使用条款时,我正在尝试显示服务条款模式视图。

所以在ApplicationDidFinishLaunchingWithOptions的appDelegate中,我有这段代码:

    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表示termsOfServiceController.delegate = self是“从不兼容的类型'MyAppAppDelegate *'分配给'id'。”

我认为我在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实现文件中合成它。

根据这个example,我将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 :(得分:0)

错误是因为MyAppAppDelegate不是UIViewController子类,因此无法处理presentModalViewController:animated:

所以不,你的app委托不能呈现modalViewController,它必须由真实的视图控制器呈现。这不难做到,只需创建一个在viewDidLoad中显示您的术语,并在模态控制器退出时做出适当响应,做下一步需要做的事情。