AppDelegate.m 类中的@interface 错误

Posted

技术标签:

【中文标题】AppDelegate.m 类中的@interface 错误【英文标题】:@interface error in AppDelegate.m class 【发布时间】:2012-12-15 18:44:13 【问题描述】:

应该是我缺少的简单解决方案。我有一个选项卡视图控制器驱动的应用程序,我想在用户启动或打开应用程序时对其进行密码保护。我在 IB 中创建了一个密码类和视图控制器。

我正在尝试通过以下代码使用 AppDelegate.m 类 applicationDidLoadInForeground 方法:

- (void)applicationWillEnterForeground:(UIApplication *)application

    NSUserDefaults *submissionDefaults = [NSUserDefaults standardUserDefaults];
    if ([submissionDefaults boolForKey:@"passcodeActive"] == true)
       
        PINAuthViewController *pinController = [[PINAuthViewController alloc] init];
        [self presentViewController:pinController animated:YES completion:nil];
    

我已经在标题中导入了我的 PINAuthViewController 类

#import "PINAuthViewController.h"

但我在编译“没有可见的@interface for 'AppDelegate' 声明选择器'presentViewController:animated:completion'时收到错误。

谁能告诉我我做错了什么?如果密码输入正确,目的是关闭密码视图控制器。

非常感谢,詹姆斯

【问题讨论】:

【参考方案1】:

应用委托不能呈现视图控制器,因为它不是 UIViewController 本身的子类。

您需要将代码更改为:

[self.window.rootViewController presentViewController:pinController animated:YES completion:nil];

【讨论】:

您在该方法调用中缺少一些关键文本。 糟糕,已修复!感谢您的提醒。 谢谢两位!我的代码现在可以编译,但是当我运行它时,执行该行时视图会变黑。在 xcode 中引发以下警告: 警告:尝试在 上显示 ,其视图不在窗口层次结构中!关于如何解决这个问题的更多建议?谢谢! 我建议您将检查密码是否处于活动状态的逻辑移至主视图控制器(在应用程序启动后呈现的控制器),而不是应用程序委托。这应该可以解决您的问题。 嗨,Hesham,我希望将它放在主视图控制器中。你能告诉我应该把它放在哪里,以便它只有在第一次打开和应用程序在后台重新启动时才会触发?请记住,我使用的是 TabBar 控制器,因此有多个视图控制器可以重新启动...谢谢,James【参考方案2】:

你也可以试试这个代码...

self.viewController = [[FirstViewController  alloc] initWithNibName:@"FirstViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];

【讨论】:

以上是关于AppDelegate.m 类中的@interface 错误的主要内容,如果未能解决你的问题,请参考以下文章

未修改的 AppDelegate.m 中的编译错误

AppDelegate.m 文件中的两个包冲突

从 AppDelegate.m 中的 applicationDidEnterBackground 中去掉键盘

appdelegate.m 中的 UIAlertView 不起作用

来自 appDelegate 的 javascript 调用:phonegap iOS

如何从 Xcode 中的 AppDelegate.m 文件更新 UILabel 的文本?