【问题标题】:iOS - viewDidLoad is being called BEFORE the didFinishLaunchingWithOptions delegate?iOS - 在 didFinishLaunchingWithOptions 委托之前调用 viewDidLoad?
【发布时间】:2011-08-11 17:59:50
【问题描述】:

我有一个应用程序可以正常工作。

但是,我在 rootViewController 的 viewDidLoad 方法的第一行放置了一个断点,在我的委托的 didFinishLaunchingWithOptions 的第一行放置了另一个断点,

令我惊讶的是,应用程序进入了 viewDidLoad 方法,然后进入了 didFinishLaunchingWithOptions,然后又执行了一次 viewDidLoad 方法。

发生了什么事?我认为这种行为是完全错误的。

提前谢谢你!

# 已编辑

这是我 iPad 的委托 didFinishLaunchingWithOptions 方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{   
    [[UIApplication sharedApplication] setStatusBarHidden:NO];
    UtilXML *utilXML = [[UtilXML alloc] init];
    [utilXML startXMLCommunication];
    int quantidadeDeComicsBaixadas = [utilXML quantidadaDeComicsBaixadas];

    main_iPad *mainiPad = [[main_iPad alloc] init];
    mainiPad.quantidadeDeComicsBaixadas = quantidadeDeComicsBaixadas;
    mainiPad.navigationItem.title = @"TitleFirstScreen";

    UIBarButtonItem *botaoSobre = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:mainiPad action:@selector(goToAboutView)];
    mainiPad.navigationItem.rightBarButtonItem = botaoSobre;

    navController = [[UINavigationController alloc] initWithRootViewController:mainiPad];
    navController.navigationBar.tintColor = [UIColor orangeColor];
    navController.navigationBar.translucent = YES;


    [self.window addSubview:navController.view];
    [self.window makeKeyAndVisible];
    return YES;
}

这是我 iPhone 的代理 didFinishLaunchingWithOptions 方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO];

    UtilXML *utilXML = [[UtilXML alloc] init];
    [utilXML startXMLCommunication];
    int quantidadeDeComicsBaixadas = [utilXML quantidadaDeComicsBaixadas];

    main_iPhone *mainiPhone = [[main_iPhone alloc] init];
    mainiPhone.quantidadeDeComicsBaixadas = quantidadeDeComicsBaixadas;
    mainiPhone.navigationItem.title = @"TitleFirstScreen";

    UIBarButtonItem *botaoSobre = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:mainiPhone action:@selector(goToAboutView)];
    mainiPhone.navigationItem.rightBarButtonItem = botaoSobre;

    navController = [[UINavigationController alloc] initWithRootViewController:mainiPhone];
    navController.navigationBar.tintColor = [UIColor orangeColor];
    navController.navigationBar.translucent = YES;

    [self.window addSubview:navController.view];
    [self.window makeKeyAndVisible];
    return YES;
}

这两种设备都会出现这种奇怪的行为。

【问题讨论】:

  • 您能否再描述一下您的应用程序委托内部发生了什么?您是否有多个应用程序委托文件? (即 iPhone/iPad)

标签: ios delegates viewdidload


【解决方案1】:

application:didFinishLaunchingWithOptions: 的文档

您应该使用此方法来初始化您的应用程序并准备 它用于运行。它在您的应用程序启动后调用 并且其主 nib 文件已加载。当时这个方法是 调用时,您的应用程序处于非活动状态。之后的某个时候 此方法返回,调用后续委托方法移动 您的应用程序处于活动(前台)状态或后台 状态。

因此,一旦调用 view 属性或方法,视图控制器就会延迟加载视图。发生这种情况时会调用 viewDidLoad,因此如果您的窗口 rootViewController 属性设置为 nib 中的根 ViewController,那么这是预期的行为。

【讨论】:

  • 就是这样!我删除了 rootViewController 中的链接,它现在按预期运行(在 viewDidLoad 之前调用了didFinishLaunchWithOptions)。谢谢一百万!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
相关资源
最近更新 更多