我可以在项目中创建App Delegate文件吗?

时间:2012-06-21 09:53:43

标签: objective-c ios cocoa-touch

我以编程方式创建了我的ipad代码而不使用nib.I将我的ipad应用程序转换为通用应用程序,如下所示:

  

选择项目目标(侧栏上的蓝色目标)。摘要 - > iOS版   应用目标 - >将Devices设置为Universal。

现在我想为iphone启动不同的app委托和ipad的不同app委托。已经有一个ipad的app委托,现在我想为iphone创建不同的app委托,以便在main.m我可以启动不同的应用程序代表基于设备(ipad和iphone)。所以我的问题是,我可以创建不同的应用代表,如果是,那么如何?

3 个答案:

答案 0 :(得分:2)

项目main.m

中的

你可以做点什么

int main(int argc, char *argv[])
{
    @autoreleasepool {

        NSString *appDelegateName;
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){
            appDelegateName =  NSStringFromClass([AppDelegateIPhone class]);
        } else {
            appDelegateName =  NSStringFromClass([AppDelegateIPad class]);
        }
        return UIApplicationMain(argc, argv, nil, appDelegateName);
    }
}

但IMO你不应该这样做。

而不是像苹果那样做,在app委托加载不同的视图控制器或不同的XIB。

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease];
    } else {
        self.viewController = [[[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil] autorelease];
    }
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}



@end

答案 1 :(得分:0)

您应该可以通过XIB为您的应用程序执行此操作。默认情况下,AppDelegate由MainWindow.xib(或任何调用的主XIB文件)的文件所有者和代理插座之间的连接分配。如果你使用了转换器,那么MainWindow~ipad.xib应该有一个类似的插座,它当前也指向同一个代理。如果您希望它们不同,请创建一个新的AppDelegate子类并将其分配给XIB的~ipad版本中的插座,它应该相当于调用UIApplicationMain而不必手动执行。

答案 2 :(得分:0)

您甚至不必担心那里的“appDelegateName”变量。只需调用return,如下所示:

  int main(int argc, char *argv[])
  {
      @autoreleasepool {

          if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad){
              return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate_iPad class]));
          } else {
              return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate_iPhone class]));
          }

       }
   }