Objective c 当应用程序重新打开时执行代码

Objective c 当应用程序重新打开时执行代码,objective-c,ios,multitasking,Objective C,Ios,Multitasking,我有一个单视图应用程序。当我点击home按钮并“最小化”应用程序时,我希望在用户重新打开它时能够执行代码 由于某些原因,当我最小化并重新打开应用程序时,ViewDidDisplay和ViewWillDisplay不会执行 有什么建议吗 提前谢谢 萨达姆之所以这样做,是因为你没有重新绘制你的视图。改为在AppDelegate中使用应用程序将进入前台。这对您来说应该很好。您可以在中的应用程序委托中执行代码 - (void)applicationDidBecomeActive:(UIApplicati

我有一个单视图应用程序。当我点击home按钮并“最小化”应用程序时,我希望在用户重新打开它时能够执行代码

由于某些原因,当我最小化并重新打开应用程序时,ViewDidDisplay和ViewWillDisplay不会执行

有什么建议吗

提前谢谢
萨达姆之所以这样做,是因为你没有重新绘制你的视图。改为在AppDelegate中使用应用程序将进入前台。这对您来说应该很好。

您可以在中的应用程序委托中执行代码

- (void)applicationDidBecomeActive:(UIApplication *)application
或者注册以观察
UIApplicationIDBECOMEACTIVENTIfication
通知并执行代码作为响应

应用程序委托中还有通知
UIApplicationWillEnterForegroundNotification
和方法
-(void)applicationWillEnterForeground:(UIApplication*)application


要连接通知,请在适当的位置添加此项

  [[NSNotificationCenter defaultCenter] addObserver:self 
                                       selector:@selector(didBecomeActive:)
                                           name:UIApplicationDidBecomeActiveNotification
                                         object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self];
定义一个对应的方法

- (void)didBecomeActive:(NSNotification *)notification;
{
    // Do some stuff
}
然后别忘了在适当的时候让自己成为一个观察者

  [[NSNotificationCenter defaultCenter] addObserver:self 
                                       selector:@selector(didBecomeActive:)
                                           name:UIApplicationDidBecomeActiveNotification
                                         object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self];
讨论

您很可能只希望您的viewController在当前处于活动状态时响应事件,因此注册通知的好地方是
viewDidLoad
,然后将自己作为观察者移除的好地方是
viewDidUnload


如果你想运行与你的
viewdide:
方法相同的逻辑,那么把它抽象成另一个方法,让
viewdide:
和响应通知的方法调用这个新方法。

这是因为苹果公司实施了“多任务”,当你再次启动应用程序时,它们会被完全重新加载,就像你从未关闭过它们一样。因此,没有理由调用ViewDid

您可以实现

- (void)applicationWillEnterForeground:(UIApplication *)application
在那里做你想做的事。或者在视图控制器中注册通知
UIApplicationWillEnterForegroundNotification
。在viewDidLoad中执行此操作:

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myAppWillEnterForeground) 
    name:UIApplicationWillEnterForegroundNotification object:nil];

当然,实现指定的选择器并在那里执行您想要的操作。

我不确定@Paul.s的答案如何执行OP请求,因为注册
uiapplicationidbecomeactivityfication
将执行两次:

  • 启动应用程序时
  • 当应用程序进入后台时
  • 更好的做法是将这些事件解耦为两个不同的事件:

  • :
  • 当应用程序激活时发布。 应用程序在接收事件时处于活动状态。一个活跃的应用程序可以说是有焦点的。它在启动后获得焦点,当覆盖窗口弹出或设备锁定时失去焦点,当设备解锁时获得焦点

    这基本上意味着所有与“首次启动应用程序时”相关的逻辑

  • :
  • 在应用程序离开后台状态成为活动应用程序之前不久发布

    结论 通过这种方式,我们可以创建一种既能执行两种算法,又能以解耦方式执行的设计:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(yourMethodName1) name:UIApplicationWillEnterForegroundNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(yourMethodName2) name:UIApplicationDidBecomeActiveNotification object:nil];
    

    明亮的工作完美。通知中心看起来很强大!我们应该花些时间来更详细地了解这一点。谢谢它当然是强大的,但它也可以用来创建一个令人讨厌的无法维护的逻辑蜘蛛网,所以请记住这一点。