Ios 在ApplicationWillResignActive中查看控制器变量

Ios 在ApplicationWillResignActive中查看控制器变量,ios,objective-c,background,nstimer,Ios,Objective C,Background,Nstimer,我试图让我的计时器在后台“运行”,方法是在进入后台时将时间保存到磁盘上,然后在进入前台时检索它。每个视图控制器都有一个计时器和一个由用户指定的时间间隔。问题是,我不知道如何访问timeInterval变量。我想我可以通过使用这样的东西来获得时间的差异(这有用吗?) 每个视图控制器(以及计时器/时间间隔)的访问方式如下: -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPat

我试图让我的计时器在后台“运行”,方法是在进入后台时将时间保存到磁盘上,然后在进入前台时检索它。每个视图控制器都有一个计时器和一个由用户指定的时间间隔。问题是,我不知道如何访问timeInterval变量。我想我可以通过使用这样的东西来获得时间的差异(这有用吗?)

每个视图控制器(以及计时器/时间间隔)的访问方式如下:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    DetailViewController *detailVC;
    if (![self.detailViewsDictionary.allKeys containsObject:indexPath]){
        detailVC = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil];
        [self.detailViewsDictionary setObject:detailVC forKey:indexPath];
        detailVC.context = self.managedObjectContext;
    }else{
        detailVC = self.detailViewsDictionary[indexPath];
    }
        Tasks *task = [[self fetchedResultsController] objectAtIndexPath:indexPath];
        detailVC.testTask = task;
        [[self navigationController] pushViewController:detailVC animated:YES];
    NSLog(@"%@", self.detailViewsDictionary);
    [[NSNotificationCenter defaultCenter] addObserver:detailVC forKeyPath:self.detailViewsDictionary[indexPath] options:nil context:nil];
}

我正在将每个视图控制器添加到通知中心,以便可以在应用程序代理中访问它(我认为这是对的?)。问题是,我不知道如何将第一个代码与视图控制器代码组合,因为我无法在应用程序委托中访问视图控制器的属性。有什么建议可以让我的计时器在后台“运行”吗?

你完全搞错了。无需在app delegate中执行这些操作

让每个视图控制器侦听
UIApplicationWillResignActiveNotification
通知。然后,每个视图控制器可以在收到通知时执行其认为合适的任何操作来保存其数据

更新:

在视图控制器的
init…
方法中,注册通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resigningActive) name:UIApplicationWillResignActiveNotification object:nil];
在视图控制器的
dealloc
方法中,取消注册:

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil];
}
然后执行
resigningActive
方法:

- (void)resigningActive {
    // The app is resigning active - do whatever this view controller needs to do
}

你完全搞错了。无需在app delegate中执行这些操作

让每个视图控制器侦听
UIApplicationWillResignActiveNotification
通知。然后,每个视图控制器可以在收到通知时执行其认为合适的任何操作来保存其数据

更新:

在视图控制器的
init…
方法中,注册通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resigningActive) name:UIApplicationWillResignActiveNotification object:nil];
在视图控制器的
dealloc
方法中,取消注册:

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil];
}
然后执行
resigningActive
方法:

- (void)resigningActive {
    // The app is resigning active - do whatever this view controller needs to do
}

你能解释一下我将如何执行该通知吗?我尝试过这样做,但是每当视图控制器加载时,我都会出错,所以我认为我做错了。。另外,你是说我应该在我的视图控制器中实现UIApplicationWillResignActiveNotification方法吗?nvm我想出来了!解除分配对象的目的是什么?
dealloc
在解除分配对象时调用。在视图控制器离开之前清除通知注册非常重要。如果你对此不太了解,那么你需要学习内存管理。你能解释一下我将如何实现这个通知吗?我尝试过这样做,但是每当视图控制器加载时,我都会出错,所以我认为我做错了。。另外,你是说我应该在我的视图控制器中实现UIApplicationWillResignActiveNotification方法吗?nvm我想出来了!解除分配对象的目的是什么?
dealloc
在解除分配对象时调用。在视图控制器离开之前清除通知注册非常重要。如果你对这些不太了解,那么你需要学习内存管理。