【问题标题】:Converting separate iPhone and iPad projects into a Universal one将单独的 iPhone 和 iPad 项目转换为通用项目
【发布时间】:2012-04-01 08:07:51
【问题描述】:

我有两个完整的项目。一个在 iPhone 上工作,另一个在 iPad 上工作。我想将这些合并到一个通用应用程序中。

到目前为止,我唯一的解决方案是使用“_iPhone”和“_iPad”后缀重命名应用程序类,并将所有引用更改为代码中的引用。然后我可以合并 AppDelegates 并在启动时加载正确的控制器。

这是两个非常大的项目,所以这种方法会非常耗时。谁有更好的解决方案?

【问题讨论】:

标签: iphone ios xcode ipad universal


【解决方案1】:

据我所知,唯一的解决方案是创建一个新的通用项目并将您的文件放在那里.. 因为 iPhone 和 iPad 之间有很多共享代码,您可以检查设备的用途通过检查 UI_USER_INTERFACE_IDIOM()is UIUserInterfaceIdiomPadUIUserInterfaceIdiomPhone 来运行您的应用程序。对于重命名,最简单的方法是突出显示类名并选择 Refactor>Rename,xCode 将采用关心在你使用它的每个地方重命名类名。

【讨论】:

  • 感谢重构技巧,这将节省大量时间!
【解决方案2】:

您起草的解决方案似乎是我所知道的唯一选择 - 很想看到其他答案。

但有一件事;您实际上可以保留两个单独的 AppDelegate。

在您的主实现中,您可以检查设备并启动 iPad-AppDelegate 或 iPhone-AppDelegate。

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = 0;

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        retVal = UIApplicationMain(argc, argv, nil, @"XXXAppDelegate_iPad");
    }
    else 
    {
        retVal = UIApplicationMain(argc, argv, nil, @"XXXAppDelegate_iPhone");        
    }
    [pool release];
    return retVal;
}

然而,在大多数情况下,我建议重新考虑这种解决方案 - 这通常会导致不一致和/或代码复制。不过,我认为我应该指出这个选项。

【讨论】:

  • 我知道这个选项,但我不喜欢搞乱 Main.m。在 Apple 最新的 iOS 模板中,他们在一个 AppDelegate 中完成所有操作,因此认为这是最好的。感谢您的回答。
猜你喜欢
  • 2012-03-10
  • 1970-01-01
  • 2014-02-09
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 2013-01-27
相关资源
最近更新 更多