Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 检查应用程序是否从非活动状态恢复到首次启动状态?_Iphone_Objective C_Cocoa Touch_Ios_Multitasking - Fatal编程技术网

Iphone 检查应用程序是否从非活动状态恢复到首次启动状态?

Iphone 检查应用程序是否从非活动状态恢复到首次启动状态?,iphone,objective-c,cocoa-touch,ios,multitasking,Iphone,Objective C,Cocoa Touch,Ios,Multitasking,我有一个NSTimer,当我的应用程序退出活动状态时,我会停止它,稍后当应用程序再次变为活动状态时,我会重新启动它。我没有意识到的是,当我的应用程序第一次启动时,applicationwillresignative会启动(非常明显)。因此,发生的情况是我的NSTimer启动不正确(当应用程序首次启动时)。我的问题是,有没有办法检查应用程序是否从非活动状态恢复到第一次启动状态 - (void)applicationWillResignActive:(UIApplication *)applicat

我有一个NSTimer,当我的应用程序退出活动状态时,我会停止它,稍后当应用程序再次变为活动状态时,我会重新启动它。我没有意识到的是,当我的应用程序第一次启动时,
applicationwillresignative
会启动(非常明显)。因此,发生的情况是我的NSTimer启动不正确(当应用程序首次启动时)。我的问题是,有没有办法检查应用程序是否从非活动状态恢复到第一次启动状态

- (void)applicationWillResignActive:(UIApplication *)application {
    // STOP CORE TIMER
    [[[self mapController] coreTimer] invalidate];
    [[self mapController] setCoreTimer:nil];
}

似乎只有当应用程序从后台返回时才会触发。刚刚测试过,不会在发布时调用

讨论

在iOS 4.0及更高版本中,此方法是 作为从 将背景设置为活动状态。 您可以使用此方法撤消许多 您对应用程序所做的更改 入境申请 背景。对该方法的调用是 总是接著打电话给 ApplicationIDBecomeActive:方法, 然后将应用程序从 将非活动状态转换为活动状态


但愿我早知道这件事。我只是在ApplicationIDBecomeActive中检查了一个布尔值,看看它是否刚刚启动。非常感谢,有一个问题:我处理用户锁定iPhone(顶部按钮),然后使用屏幕滑块解锁,在这种情况下,应用程序永远不会进入后台(无论如何也不会很快),它只是从applicationWillResignActive转到applicationdidebecomeactive。根据我的测试,
applicationWillResignActive
applicationdidebecomeactive
在用户锁定和解锁手机时会立即被调用。这是正确的,而且启动时也会调用applicationdidebecomeactive,这是我的问题。我认为在我的例子中,答案是添加一个标志(正如Jesse建议的那样)来记录应用程序所处的状态。@fuzzygoat是的,我认为这就是方法。我没有任何新想法。
- (void)applicationDidBecomeActive:(UIApplication *)application {
    // START CORE TIMER
    [[self mapController] setCoreTimer:[NSTimer 
        scheduledTimerWithTimeInterval:ONE_SECOND 
                                target:[self mapController]   
                              selector:@selector(timerDisplay:) 
                              userInfo:nil 
                               repeats:YES]];
}