Ios 为什么控制器';s类方法是';当应用程序从后台变为活动状态时,是否无法调用?
当我与我的应用程序共享某个内容时,它会被Ios 为什么控制器';s类方法是';当应用程序从后台变为活动状态时,是否无法调用?,ios,background,viewdidload,viewdidappear,Ios,Background,Viewdidload,Viewdidappear,当我与我的应用程序共享某个内容时,它会被 -(BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{获取与之共享的内容。之后,我需要在应用程序的第一个控制器中以模式呈现内容,但如果从appDelegate调用函数[self.library showContent:项目];whe
-(BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{
获取与之共享的内容。之后,我需要在应用程序的第一个控制器中以模式呈现内容,但如果从appDelegate
调用函数[self.library showContent:项目];
where's library是应用程序上的主控制器,它不会调用主控制器的类方法,如viewdiload
或viewdideapp
,而只调用appDelegate
中的applicationIDbecomeactive
,我无法从showContent运行presentModalViewController
e> 方法,因为它的视图尚未显示在屏幕上
简短版本:为什么当应用程序来自applicationIDbecomeactive
时,它不会调用第一个控制器的类方法,如viewdisbeen
?如果我不知道主控制器何时在屏幕上,当应用程序从e background当它被放在后台时,它会以它前面的视图打开。要在使用url方案与应用程序共享某些内容时显示视图控制器,您必须在handle open url方法中告诉应用程序这样做:
- (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.
}
我认为如果把UIViewController
生命周期和应用程序生命周期混为一谈,这两个生命周期是不同的
简要提示:将您的代码从ViewDidAppear
取出到外部方法,并尝试在applicationIDbecomeactive
的某个位置调用此方法
有关应用程序生命周期,请参阅链接
有关UIViewController
lifecycle的信息,请参阅链接
希望这能有所帮助。我知道,但我不想用新控制器替换旧控制器。新控制器必须是旧控制器中的模态控制器,所以我需要完成加载旧控制器并在其中加载一个presentModalViewController。@Nikos M。我想你的回答误导了我。当你重新加载viewController时,你会处理一些副作用,即您不一定需要网络调用、I/O等功能。“简要提示:将您的代码从ViewDidApparOut转换为外部方法,并尝试从ApplicationIDBecMeactive的某个位置调用此方法。”好的,但我需要知道,当我调用此函数时,我的控制器(旧的控制器)是的,但如果我尝试在日志中实例化presentmodalview,我会看到“谁的视图不在窗口层次结构中!”