performSelectorOnMainThread不调用

时间:2014-04-17 02:50:43

标签: ios methods call appdelegate performselector

我的应用程序代理正在调用didFinishLaunchingWithOptions方法。在这个方法中有一行:

[viewController performSelectorOnMainThread:@selector(initTimer) withObject:nil waitUntilDone:NO];

现在,即使调用didFinishLaunchingWithOptions方法,我的视图控制器中的initTimer方法也未被调用。为什么呢?

之前我没有遇到此问题,但现在我更新了我的应用以使用故事板而不是现在没有工作的xib,initTimer未被调用为此行应该做。

以下是完整的didFinishLaunching ...代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after app launch   
    [application setIdleTimerDisabled:YES];
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];
    //[viewController performSelector:@selector(initTimer)];
    NSLog(@"Handled");
    [viewController performSelectorOnMainThread:@selector(initTimer) withObject:nil waitUntilDone:NO];
    return YES;
}

旧的执行选择器仍在那里进行测试,而NSLog调用是我知道该方法被调用的方式。我在initTimer方法中有一个类似的NSLog调用,而且我知道它是如何被调用的。

2 个答案:

答案 0 :(得分:1)

您是否确认在拨打电话时viewController不是nil?我没有看到它在任何地方初始化。

答案 1 :(得分:0)

好吧,我修好了。

这是我忘了的。因为我正在使用故事板,我的appDelegate无论如何都不应该像上面那样。它看起来应该像Apple展示的here。这就是我所做的。

但是之后,为了使initTimer方法正确调用,我需要将以下内容放在viewController自己的viewDidLoad方法中:

[self performSelectorOnMainThread:@selector(initTimer) withObject:nil waitUntilDone:NO];

噗!有效。谢谢大家的帮助。对此,我真的非常感激。 :)