【问题标题】:How to start an iPhone 3.1.3 project in Xcode 3.2.3 (iPhone SDK 4 beta)如何在 Xcode 3.2.3 (iPhone SDK 4 beta) 中启动 iPhone 3.1.3 项目
【发布时间】:2011-09-13 00:34:43
【问题描述】:

自从我下载了 iPhone SDK 4.0 的测试版后,我遇到了很大的问题。 好吧,我几周前才开始研究 iPhone 开发,但我不知道 Xcode 应该如何工作:

每当我开始一个新项目时,我都会选择“基于视图的应用程序”之类的模板。现在,目标将始终(至少我没有在任何地方找到偏好!)是最新的 SDK:4.0。 但是随后:将目标切换回 3.1.3 模板文件似乎包含错误!以这种方式启动一个空的应用程序会产生异常:

由于未捕获而终止应用 异常“NSUnknownKeyException”, 原因:[...] 这个类不是关键 键的值编码兼容 根视图控制器

原因似乎是生成的 MainWindow.xib 在 vi​​ewController 旁边有一个 rootViewController 的“引用出口”...

生病了

现在,我的(愚蠢的)问题:我如何开发一个应用程序不是针对最新的 SDK,但标准 3.1.3 SDK?换句话说:我希望 Xcode 不仅在 New Project 窗口中要求 项目类型,而且要求我的 desired target platform 生成正确的模板!

使用此步骤生成的模板对 4.0 以外的任何其他目标均无效,这对吗? 怎么可能?

...我想要我的 Eclipse 回来! 叹息

有人可以帮帮我吗?

【问题讨论】:

  • 也试图找到这个问题的答案。现在 SDK4 不再处于测试阶段,它仍然是一个问题。

标签: iphone xcode


【解决方案1】:

以防万一有人在寻找这个。

只需检查窗口是否首先响应该功能。如果是(4.0 及更高版本),则使用它,否则先使用 4.0 之前的版本。

if([self.window respondsToSelector:@selector(rootViewController)]) {
    self.window.rootViewController = self.viewController;        
} else {
    [self.window addSubview :self.viewController.view];        
}

【讨论】:

    【解决方案2】:

    简单:不要使用测试版 SDK,它在此阶段用于为未发布版本的操作系统开发应用程序,并且您已同意 NDA。

    所以下载已发布的 SDK 版本,开心就好。

    【讨论】:

    • 这在当前情况下可能会有所帮助 - 但请注意:如何在任何 Xcode 版本中为较低版本的 SDK 开发任何应用程序?当我想要更低的目标 SDK 时该怎么办?我忍不住要与 Xcode 作斗争——这是我见过的最糟糕的 IDE ...... :-( 在“正常”的 IT 世界中,我尝试更新版本的 IDE,因为我认为可能会有很好的新功能。在 Apple 的世界里,这是否意味着我需要安装针对特定目标的 SDK 版本?换句话说:安装几个 Xcode ???
    • 不,这意味着不要抱怨测试版,也不要讨论它们。不,Xcode 不是最糟糕的 IDE,Eclipse 是(批评你没有努力理解的东西并不聪明)。如果您想针对以前的操作系统版本,只需在目标检查器中设置基本 SDK - 打开目标组,双击您的应用程序目标,然后在搜索栏中输入 SDK。
    • 这个问题现在是一个非测试版的情况。它与 SDK 的最终版本一起发生。如果您认为该问题不相关,请投下该问题 - 比抨击 OP 更好。
    【解决方案3】:

    我找到的解决方案是在 didFinishLaunchingWithOptions 中手动将我的视图添加到窗口中,而不是依赖于 Interface Builder 连接。似乎使用 iOS4 IB 连接 rootViewController 会导致应用在部署到 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;
    }
    

    如果你的主视图是一个导航控制器;如果不是,请相应地更改 addSubview。

    【讨论】:

      【解决方案4】:

      我正在寻找的问题的答案似乎是:

      这是不可能的。

      要针对某个 iOS 版本进行开发,请安装相应的 Xcode。 苹果显然不认识想要同时为多个目标平台开发的人。 :-(

      【讨论】:

        【解决方案5】:

        我认为弗朗索瓦有一个很好的答案。

        我也是 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 文件并将“self.window.rootViewController = self.viewController”行替换为 Francois 的优雅解决方案:

         if([self.window respondsToSelector:@selector(rootViewController)]) {
            self.window.rootViewController = self.viewController;        
        } else {
            [self.window addSubview :self.viewController.view];        
        }
        

        现在 SDK 3.2 中基于视图的应用程序模板适用于 iOS 3 和 4。

        【讨论】:

          猜你喜欢
          • 2011-03-17
          • 2011-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-18
          • 1970-01-01
          • 2011-02-06
          相关资源
          最近更新 更多