锁定和解锁手机后更新UIView

时间:2014-04-02 17:19:31

标签: ios objective-c multithreading uiview

我的应用正在运行NSURLSession,用于下载文件。但是,当用户锁定手机时,我无法更新屏幕上的子视图。他们被冻结了。当手机通过app delegate锁定时,我有一个方法被调用;但是,它不会更新任何子视图。

我尝试将更新放在主线程或背景上,但没有任何效果。我只是想调整某些对象的可见性,但在屏幕锁定后不能再这样做。我希望这是足够的信息。任何帮助都是极好的。谢谢你们!

这是手机锁定时通过应用代表调用的内容

-(void)pauseDownload{


// I want to update the UI!!!!


[session invalidateAndCancel];
bytesSum = 0;
percent = 0;

[HUD hide:YES];
self.downloadButton.hidden = NO;
HUD.progress = percent;
[HUD  setLabelText:[NSString stringWithFormat:@"Loading %.0f%%",(percent*100)]];


}

所有可见性权限都不起作用且对象无响应。我的猜测是,当手机被锁定时,我正在丢失指向对象的指针。我可以重新获得它们吗?我离开了吗?!

3 个答案:

答案 0 :(得分:4)

在loadView或viewDidLoad中使用:

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

-(void) becomeActive
{
  NSLog(@"ACTIVE");
  //
}

答案 1 :(得分:2)

您可以在viewWillAppear:生命周期视图控制器方法中更新UI:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    // update UI
}

Also, read apple's doc

答案 2 :(得分:0)

设备锁定后,没有任何方法或无法创建后台进程或继续下载过程。

唯一可行的方法是我们在下载过程中如果用户锁定设备&应用程序进入后台下载的内容应该保存。因此,一旦应用程序再次处于活动状态,下载过程应从停止的位置开始。