【问题标题】:How to set up an iOS app by programmatically creating window and views?如何通过以编程方式创建窗口和视图来设置 iOS 应用程序?
【发布时间】:2012-01-14 02:05:12
【问题描述】:

我想在我的项目中取消 XIB (Nib) 文件,因为这就是我滚动的方式。但是我发现我的 AppDelegate 类的方法 didFinishLaunchingWithOptions 甚至从未被调用过。

我尝试在我的应用程序的主 plist 中设置主体类,如下所示:

<key>NSPrincipalClass</key>
<string>AppDelegate</string>

这只会导致错误:

    +[AppDelegate registerForSystemEvents]: unrecognized selector sent to class 

那么...我怎么能没有主体类而只运行我的 AppDelegate 类?

谢谢。

【问题讨论】:

  • 我在这个答案的后半部分介绍它:stackoverflow.com/questions/7535605/…
  • 您还需要从 into.plist 中删除对 .xib 的引用
  • @"AppDelegate" 是脆弱的——如果你重命名你的类,它会损坏。使用我的回答中描述的 NSStringFromClass() 方法来避免这个问题。

标签: ios xib nib uiapplicationdelegate uiapplication


【解决方案1】:

最简单的做法是从适当的项目模板开始...选择“空应用程序”不会创建 nib,但会使用以下关键行正确设置 main.m:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

我认为 registerForSystemEvents 是 UIApplication 上的私有方法,这是有道理的,因为主体类应该是 UIApplication 或其子类,而不是符合 UIApplicationDelegate 的响应者。

上面的 UIApplicationMain() 调用会将您的主体类设置为 UIApplication 并将委托设置为您的自定义 AppDelegate 类。

但正如我所说 - 只需使用适当的项目模板让生活变得简单。

【讨论】:

    【解决方案2】:

    所有基于 C 的程序都需要 main.m,它是所有程序的起点。您可以选择空白模板,也可以创建自己的模板。虽然如果你创建自己的,你需要确保你有一个自动释放池。您需要将您的应用程序委托导入 main.m,我很确定您也需要 UIKit。然后添加以下代码(根据需要替换您的应用委托类:

    int main(int argc, char *argv[])
        {
            int retVal = 0;
            @autoreleasepool {
                retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
            }
            return retVal;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-26
      • 1970-01-01
      • 2013-03-08
      • 2018-05-23
      • 2012-02-11
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多