【问题标题】:Why the controller's class method aren't get called when the app become active from background?当应用程序从后台变为活动状态时,为什么不调用控制器的类方法?
【发布时间】:2014-07-29 06:56:40
【问题描述】:

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

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

【问题讨论】:

    标签: ios background viewdidload viewdidappear


    【解决方案1】:

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

    小提示:将您的代码从ViewDidAppearout 带到外部方法,并尝试在applicationDidBecomeActive 的某个地方调用此方法。

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

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

    希望能有所帮助。

    【讨论】:

    • "简要提示:将您的代码从 ViewDidAppearout 获取到外部方法,并尝试从 applicationDidBecomeActive 的某处调用此方法。"好的,但我需要知道,当我调用此函数时,我的控制器(旧控制器)在屏幕上,最终在其上创建一个新的模态控制器。
    • 是的,但如果我尝试在 Log 上实例化一个 presentmodalview,我会看到“其视图不在窗口层次结构中!”
    【解决方案2】:

    当应用程序从后台变为活动状态时,它会以它被置于后台时在前面的视图打开。要在使用 url 方案与应用共享内容时显示视图控制器,您必须在句柄打开 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.
    }
    

    【讨论】:

    • 我知道,但我不想用新控制器替换旧控制器。新的必须是旧的模态控制器,所以我需要完成旧的加载并在其中加载一个presentModalViewController。
    • @Nikos M. 我认为您的回答具有误导性。当你重新加载 viewController 时,你会处理一些你不一定想要的副作用,例如网络调用、I/O 等等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    相关资源
    最近更新 更多