我使用"创建基于窗口的应用程序"在Xcode 3.x中启动了一个项目。选项。该项目似乎从info.plist条目中加载主nib文件:"主nib文件基本名称"。
现在我希望使用UIViewController加载主nib文件。我是否可以删除info.plist条目并以编程方式在" application:didFinishLaunchingWithOptions:"中加载nib文件。使用视图控制器?
(现在项目已经转移到Xcode 4.2。但我想编译器版本在这种情况下不应该重要......)
希望在这个领域有人知道可以帮助......
答案 0 :(得分:1)
如果你要升级同一个项目,那么你不能这样做。
Apple在其模板中用于进入应用程序的机制在这些版本之间发生了变化。
在3.x中,Main Interface
在项目设置中设置为MainWindow.xib
。在此xib
中,您的app委托作为对象加载。
在4.x中,main.m
专门使用以下行加载应用程序委托:
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
这是在3.x和4.x之间发生变化的最后一个参数
最好的办法是创建一个新项目,看看模板代码如何将它全部连接起来。
<强>更新强>
首先,如果你的项目有效,你真的需要改变吗?
如果是,那么我正在使用新项目中的模板代码
转到main.m
并从
int main(int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
到
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
NB 将AppDelegate
更改为您的应用委托类的名称。
您还需要更新您的应用代理,以便以编程方式创建UIWindow
。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Instantiate your rootViewController
self.window.rootViewController = yourRootViewController;
[self.window makeKeyAndVisible];
return YES;
}
这些是我能想到的最明显的差异,可能还有其他一些字幕,但我已经很久没有使用3.x了。