为什么我的ios应用程序在从xcode运行时才会继续执行后台任务

时间:2014-06-14 18:22:03

标签: iphone xcode ios7

以下是设置:

我正在构建一个使用60分钟计时器的iOS应用程序。一旦启动,我希望它通知用户,无论手机的状态如何(睡觉或查看我的应用程序)在60分钟的时间内做某事。

要做到这一点,我的本地通知设置将在相应的ViewController.m文件中的timers方法中执行:

// what happens when the timer ends
    if (secondsCount == 0) {
        [countdownTimer invalidate];// stops the countdown
        countdownTimer = nil;
        hourCountDown.text = [NSString stringWithFormat:@"60:00"];// sets the timer to 60 mins

        // shows and hides correct UI elements
        nowBtn.hidden = YES;
        countDown.hidden = YES;
        countDown.hidden = YES;
        startBtn.hidden = NO;

        // shows notification that it's time to do the task
        UILocalNotification *itsTime = [[UILocalNotification alloc] init];

        itsTime.fireDate = [NSDate dateWithTimeIntervalSinceNow:secondsCount];
        itsTime.alertBody = @"Time to do it";

        itsTime.timeZone = [NSTimeZone defaultTimeZone];
        [[UIApplication sharedApplication] scheduleLocalNotification:itsTime];
        itsTime.soundName = UILocalNotificationDefaultSoundName;

        // sets the page label
        labelState.text = [NSString stringWithFormat:@"Do it!"];

    }

在AppDelegate.m文件中,我有以下代码:

- (void)applicationDidEnterBackground:(UIApplication *)application

{     //允许计时器在应用程序未启动时在后台运行

UIBackgroundTaskIdentifier bgTask =0;
UIApplication  *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
    [app endBackgroundTask:bgTask];
}]; 

}

我注意到它似乎只是在我的手机插入我的MBP并通过Xcode的模拟器运行应用程序时显示通知。我按下我的应用程序上的右键,等待一个小时,然后显示通知。如果我拔下手机,请运行我的应用程序并按下相同的按钮,等待一小时......不会显示任何通知。

我的问题是为什么?这是因为我正在使用通过Xcode模拟器添加到我的设备的应用程序,而不是我像真正的应用程序一样安装的存档文件?如果是这样,我能做些什么呢?

谢谢!

1 个答案:

答案 0 :(得分:3)

在模拟器中运行时,后台任务可以无限次使用。连接手机后,您可以在手机上运行。在手机上,操作系统可以让您短时间内运行,当时间结束时,您的应用程序会进入睡眠状态。在iOS 7上,您在后台获得30秒。在iOS 6及更低版本中,10分钟。也不会给你你想要的东西。计算并注册将来的本地通知,或使用推送通知。