我有一个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_iPad
是MyAppDelegate
的子类,是NSObject <UIApplicationDelegate>
的子类。
我的问题是我在applicationDidFinishLoading
覆盖的MyAppDelegate_iPad
方法永远不会被调用(第一行的断点永远不会命中)。该方法看起来像这样
-(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实例?
答案 0 :(得分:1)
有一个主要的nib文件可以引导您的应用程序。此nib文件在NSMainNibFile
项下的Info.plist文件中引用,并且应包含与应用程序委托类对应的对象(在Interface Builder中设置 Class 属性)。此应用程序委托对象由文件所有者占位符上的委托出口引用。
因此,如果我理解正确,应用程序加载器将加载主nib文件,将其自身设置为nib所有者。它的delegate
属性被设置为应用程序委托类的新实例,因此加载器知道在哪里分派各种应用程序生命周期事件回调。
在Cocoa with Love上有关于Cocoa应用程序启动的博客文章很棒。
答案 1 :(得分:0)
如果您正在普及,则不需要两个不同的应用委托类。看到这个link(我的回答),它可以帮助你制作通用应用程序。