【问题标题】:How is an AppDelegate instanciated?AppDelegate 是如何实例化的?
【发布时间】:2011-09-20 03:39:57
【问题描述】:

我有一个 iOS 应用程序,我想以编程方式为其创建一个 ViewController。

我启动了一个空的 XCode 项目并修改了 main 方法,使其看起来像这样

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, @"MyAppDelegate_iPad");
    [pool release];
    return retVal;
}

应用是一个通用应用,MyAppDelegate_iPadMyAppDelegate的子类,NSObject <UIApplicationDelegate>NSObject <UIApplicationDelegate>的子类。

我的问题是我在MyAppDelegate_iPad 中覆盖的applicationDidFinishLoading 方法永远不会被调用(第一行的断点永远不会命中)。方法是这样的

-(void) applicationDidFinishLaunching:(UIApplication *)application {
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    if(!window)
    {
        [self release];
        return;
    }
    window.backgroundColor = [UIColor whiteColor];

    rootController = [[MyViewController alloc] init];

    [window addSubview:rootController.view];
    [window makeKeyAndVisible];
    [window layoutSubviews];
}

我从我的 plist 文件中删除了链接到 nib 文件的行(我曾经获得默认的“iPad 上的我的通用应用程序”白屏),现在显示的只是黑屏。 applicationDidFinishLoading 仍未被调用。

我做错了吗?我应该如何正确创建我的 AppDelegate 实例?

【问题讨论】:

  • 假设这是一个示例,您可以发布它吗?
  • @Deepak 这不是样本。我基于另一个 SO 问题 stackoverflow.com/questions/809898,但除此之外,它是通用应用程序的基本 XCode 空项目。

标签: objective-c ios cocoa-touch


【解决方案1】:

如果您要通用,则不需要两个不同的应用委托类。看到这个link(我的回答),它可能会帮助你制作通用应用程序。

【讨论】:

  • XCode 为您创建的通用应用程序模板有两个不同的 AppDelegate。有什么原因吗?
【解决方案2】:

有一个主 nib 文件可以引导您的应用程序。这个 nib 文件在 Info.plist 文件中的 NSMainNibFile 键下被引用,并且应该包含一个对应于您的应用程序委托类的对象(在 Interface Builder 中设置 Class 属性)。此应用程序委托对象由文件所有者占位符上的 delegate 出口引用。

所以,如果我理解正确,应用程序加载器会加载主 nib 文件,并将自己设置为 nib 所有者。它的delegate 属性被设置为您的应用程序委托类的新实例,因此加载程序知道在哪里分派各种应用程序生命周期事件回调。

Cocoa with Love 上有一篇关于 Cocoa 应用程序启动的精彩博文。

【讨论】:

  • 我实际上是在尝试以编程方式完成所有操作,而不是在我的用户界面中使用 nib 文件。这可能吗?还是无论如何我都需要笔尖?
  • @pwny:您始终可以创建一个仅创建应用程序委托的引导 nib。从那里你可以用代码做所有事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2017-08-30
  • 2015-10-20
  • 1970-01-01
  • 2021-11-23
相关资源
最近更新 更多