Iphone 带有Xcode 4.2的Interface Builder中的UIApplicationLegate

Iphone 带有Xcode 4.2的Interface Builder中的UIApplicationLegate,iphone,ios,xcode,ipad,sdk,Iphone,Ios,Xcode,Ipad,Sdk,我的应用程序是基于视图的应用程序。我需要创建一个UINavigationController作为我的rootViewController 在以前版本的Xcode中,有一个名为mainWindow的xib文件,我们可以在其中: 将我们的uiapplicationelegate实现连接到UIApplication的delegate出口 将ui窗口连接到ui应用程序公文包 将UIViewController连接到UIWindow的rootViewController属性 但是现在(Xcode 4.

我的应用程序是基于视图的应用程序。我需要创建一个
UINavigationController
作为我的
rootViewController

在以前版本的Xcode中,有一个名为
mainWindow
的xib文件,我们可以在其中:

  • 将我们的
    uiapplicationelegate
    实现连接到
    UIApplication
    delegate
    出口
  • ui窗口
    连接到
    ui应用程序公文包
  • UIViewController
    连接到
    UIWindow
    rootViewController
    属性
但是现在(Xcode 4.2)没有创建这个xib文件

那么,如何在InterfaceBuilder中创建自定义的
UINavigationController
并将其连接到我的
UIApplicationLegate
实现

以下是我的
UIApplicationLegate
实现中的代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    SDWebImageRootViewController *root = [[SDWebImageRootViewController alloc] initWithNibName:nil bundle:nil];

    _navigationController = [[[UINavigationController alloc] initWithRootViewController:root] autorelease];

     self.window.rootViewController = _navigationController;

    [[_navigationController navigationBar] setBarStyle:UIBarStyleBlack];
    [[_navigationController navigationBar] setTranslucent:YES];

    [_window addSubview:[_navigationController view]];
}

首先,是的,即使在最新版本的Xcode中,您仍然可以使用IB来实现这一点,所以我不确定您是从哪里得到的

如果您想知道如何在没有IB的情况下指定应用程序委托,这相当简单:

main
方法中,只需使用应用程序委托的类名作为
UIApplicationMain
的第四个参数:

int main(int argc, char *argv[])
{
    @autoreleasepool
    {
        int retVal =  UIApplicationMain(argc, argv, nil, @"APPLICATION_DELEGATE_CLASS_NAME");
        return retVal;
    }
}
事实上,当您从模板创建基于视图的应用程序时,默认情况下,Xcode 4.2会为您做到这一点(尽管它不使用静态字符串…老实说,这可能比我的建议要好,因为如果您使用内置重构,它会被重构,等等):

NSStringFromClass([AppDelegate类])

回答您的后续问题:
好的,那我该怎么办?要在接口中连接UINC插座?

不用麻烦了

还是不相信我?好的这里有一个教程。。。十五步。。。而且毫无意义

首先,创建应用程序:

打开
main.m
并将第四个参数替换为
nil

创建一个新的xib,或者劫持现有的xib(我将在这里这么做),并使文件的所有者类
UIApplication

接下来,从工具箱中添加一个
对象
,并将该类更改为您的
UIApplicationLegate
子类:

现在,切换回文件的所有者,并将
委托
出口连接到您添加的
uiapplicationelegate
。如果您正在执行我所做的操作并劫持了现有的xib,请删除
视图
引用

现在从工具箱中添加一个
ui窗口

现在从工具箱中添加一个“UIViewController
。这是您的自定义
UIViewController
。如果您想要一个
UINavigationController
UITableViewController`只需添加它即可

如果使用自定义
UIViewController
类,请在此处指定该类:

UIWindow
rootViewController
插座连接到您的
UIViewController

打开
uiapplicationelegate
界面,创建或修改
窗口
属性,使其成为
IBOutlet

切换到实现并删除设置窗口和根视图控制器的任何“无用”代码。(我在这里是在讽刺……这个简洁的代码完成了我们在这里所做的一切……只是通过编程而不是通过IB。)

切换回您的xib并连接您的
UIApplicationLegate
窗口的
出口

现在,在目标的部署信息中,将xib设置为“主界面”:


完成。。。。普修

+1,但我担心你讽刺地描述的事情会成为现实(非常感谢!!我希望在开始扩展应用程序之前做到这一点,我做了你所做的,但问题2:1-当我将文件所有者的类别更改为UIApplication时,我的outlets和actions会出现一个敌对图标,2-我添加了NSObject,并且…仍然无法在应用程序中识别我的outletsdelegate@Mc.Lover1-是的,因为那些不是UIApplication上的Outlet,它们是自定义视图控制器上的Outlet。去掉它们。你必须将它们连接到你在以后的步骤中添加的视图控制器。2-添加NSObject后,你必须更改类以指向你的应用程序委托。仔细阅读说明并尝试了解你在ea中的操作再次感谢你,史蒂夫,你很谦虚,但我做了你所做的!午餐后,应用程序接收
SIGABRT
@Mc.Lover,没有更多细节,我不知道如何帮助你。