为什么当应用程序从后台变为活动状态时,不会调用控制器的类方法?

时间:2014-07-29 06:56:40

标签: ios background viewdidload viewdidappear

当我与我的应用程序分享内容时,它会被调用 -(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{获取与其共享的内容。之后,我需要在应用程序的第一个控制器中呈现Modally内容,但是如果从appDelegate调用函数[self.library showContent:item];,其中库是应用程序的主控制器,则不会调用主控制器的viewDidLoadviewDidAppear等类方法,但applicationDidBecomeActive只有appDelegate,我无法从{presentModalViewController运行showContent 1}}方法,因为它的视图还不在屏幕上。

简短版本:为什么当应用来自applicationDidBecomeActive时,它不会调用第一个控制器的类方法,如viewDidAppear?如果我不知道主控制器何时出现在屏幕上,如何在主控制器中调用presentModalViewController

2 个答案:

答案 0 :(得分:1)

我认为,混合UIViewController生命周期和应用程序生命周期,这两者是不同的。

简要提示:将您的代码从ViewDidAppear输出到外部方法,并尝试在applicationDidBecomeActive的某处调用此方法。

有关应用程序生命周期,请参阅this链接。

对于UIViewController生命周期,请参阅this链接。

希望可以提供帮助。

答案 1 :(得分:0)

当应用程序从后台变为活动状态时,它会在前面放置的视图中打开,当它放在后台时。要在使用网址方案与您的应用分享内容时显示视图控制器,您必须告诉您的应用在您的手柄打开网址方法中执行此操作:

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation{
         /* put code to get the data you want to extract
         from the url scheme here */
         // and then load the view
         MyController *v = [[MyController alloc] init]; 
         [self loadThisController:v];//replace with any method you want to use to load this.
}