自从我下载iPhone SDK 4.0的测试版以来,我遇到了很大的问题。 好吧,几周前我刚刚开始关注iPhone开发,但我无法弄清楚Xcode应该如何工作:
每当我开始一个新项目时,我都会选择像“基于视图的应用程序”这样的模板。现在,目标总是(至少我没有在任何地方找到偏好!)是最新的SDK:4.0。 但是:然后:将目标切换回3.1.3,模板文件似乎包含错误!以这种方式启动空应用程序会产生异常:
因未捕获而终止应用 异常'NSUnknownKeyException', 理由:[...]这门课不是关键 符合编码的密钥 RootViewController的
看来,原因是生成的MainWindow.xib在viewController旁边有一个rootViewController的“引用插座”...
病
现在,我的(愚蠢)问题:如何开发针对最新SDK的应用程序 NOT ,但标准3.1.3 SDK?换句话说:我希望Xcode不仅要在New Project窗口中要求项目类型,还要为我的所需目标平台生成正确的模板!!
我是否正确使用此步骤生成的模板对4.0以外的任何其他目标无效? 那怎么可能?
......我想要我的Eclipse回来! 叹息
有人可以帮帮我吗?
答案 0 :(得分:2)
以防万一有人在寻找这个。
只需检查窗口是否首先响应该功能。如果是(4.0及更高版本),则使用它,否则首先使用pre 4.0版本。
if([self.window respondsToSelector:@selector(rootViewController)]) {
self.window.rootViewController = self.viewController;
} else {
[self.window addSubview :self.viewController.view];
}
答案 1 :(得分:1)
简单:不要使用beta SDK,它在此阶段用于为未发布的操作系统版本开发应用程序,以及您已同意NDA。
请下载已发布的SDK版本,并感到高兴。
答案 2 :(得分:1)
我发现的解决方案是在didFinishLaunchingWithOptions中手动将我的View添加到窗口,而不是依赖于Interface Builder连接。似乎连接rootViewController w / iOS4 IB导致应用程序在部署到3.x时崩溃(对我来说是3.1.3)。
因此,首先打开IB,右键单击Window,并确保“rootViewController”未连接。然后在你的AppDelegate中,你应该有像
这样的东西- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
return YES;
}
这适用于主视图是navigationController的情况。如果不是,请相应地更改addSubview。
答案 3 :(得分:0)
我正在寻找的问题的答案似乎是:
这是不可能的。
要开发某个iOS版本,请安装相应的Xcode。 Apple显然不知道想要同时为多个目标平台开发的人。 : - (
答案 4 :(得分:0)
我认为弗朗索瓦有一个很好的答案。
我也是Xcode的新手,正在使用Xcode 3.2.6并在iOS 3.1.3设备上进行测试。这些教程适用于iOS 4.3,所有这些都是从选择“基于视图的应用程序”开始的。当我测试教程时,他们在模拟器中工作但不在设备上工作。我认为这适用于SDK 4,但我自己没有尝试过。
我第一次收到错误:“...指定的最低操作系统版本为4.3,这个版本太高而无法在iPhone上安装。”
许多其他人已经解决了这个问题,但是通过转到项目>编辑项目设置,选择构建选项卡,向下滚动到部署部分并将“开发目标iOS”字段更改为与iOS相同来解决此问题。装置。
然后教程应用程序将在手机上启动,但只显示一个空白屏幕,我收到错误:“SIGABRT”和“NSException” - 即使我只是尝试启动一个简单的HelloWorld应用程序。这是由iOS 3不支持self.window.rootViewController = self.viewController引起的。
要修复它,请转到___ Delegate.m文件,并用Francois优雅的解决方案替换“self.window.rootViewController = self.viewController”行:
if([self.window respondsToSelector:@selector(rootViewController)]) {
self.window.rootViewController = self.viewController;
} else {
[self.window addSubview :self.viewController.view];
}
现在SDK 3.2中基于视图的应用程序模板适用于iOS 3和4。