2012-11-04 117 views
1

即使用户最小化并开始在ios设备上的其他内容中工作,但我的方法仅在应用程序处于活动状态时才被击中屏幕上。我在这里错过了很明显的东西吗当应用程序最小化时,performSelectorInBackground不起作用

-(void) viewDidAppear:(BOOL)animated 
{ 
    [self performSelectorInBackground:@selector(RunMethodEvenWhenMinimized) withObject:nil]; 
} 

-(void)RunMethodEvenWhenMinimized 
{ 
    while(YES) 
    { 
     //My Code 
     sleep(10); 
    } 
} 

回答

3

的问题是,你似乎是混乱的后台处理,并NSObject的后台线程助手功能。你实际上并没有指定你的方法应该在后台运行,而是在一个不是主线程的线程上运行。建议您使用-[UIApplication beginBackgroundTaskWithExpirationHandler:];来通知系统您的应用程序需要超过它在前台分配的时间才能执行方法。当所有的说法和完成时,你的代码最终会看起来像这样:

-(void) viewDidAppear:(BOOL)animated 
{ 
    UIApplication *app = [UIApplication sharedApplication]; 
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
    bgTask = UIBackgroundTaskInvalid; 
}]; 
    [self RunMethodEvenWhenMinimized]; 
    [app endBackgroundTask:bgTask]; 
} 

-(void)RunMethodEvenWhenMinimized 
{ 
    while(YES) 
    { 
     //My Code 
     sleep(10); 
    } 
} 
+0

shoud我在.h声明bgTask? – RollRoll

+0

不,它是在函数中本地声明的 – CodaFi

相关问题