Afortunadamente, esta pregunta se publicó hace 5 años, y Xcode ha hecho saltos de progresión desde entonces.
Sin embargo ... este error todavía está vivo y pateado en 2015, con Xcode 6.2 y iOS 8.2.
Esto es lo que realmente tiene que hacer, para evitar que su dispositivo se quede dormido.
(tomar una cerveza, esto es doloroso.)
Cuando mi aplicación corrió por primera vez en un dispositivo, sería cargar un montón de datos de un servicio Web. Sin embargo, si tardara demasiado en ejecutarse, la pantalla se desvanecería, luego se apagaría, el dispositivo se bloquearía y mi solicitud web terminaría con un feo "Error de conexión de red".
Intenté agregar el código para simplemente establecer/deshacer el valor idleTimerDisabled
, pero este cambio no duró mucho, y el dispositivo todavía se autobloqueó después de un tiempo.
// This didn't work for me (for very long !)
[UIApplication sharedApplication].idleTimerDisabled = NO;
[UIApplication sharedApplication].idleTimerDisabled = YES;
su lugar, lo que tenía que hacer (suspiro deprimido ..) era tener un conjunto temporizador/desarmar este valor cada 20 segundos.
En mi archivo .h:
@property (strong, nonatomic) NSTimer* stayAliveTimer;
-(void)callEveryTwentySeconds;
En mi archivo .m:
-(void)callEveryTwentySeconds
{
// DON'T let the device go to sleep during our sync
[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
[[UIApplication sharedApplication] setIdleTimerDisabled:YES];
}
-(void)loadDataFromWebService
{
self.stayAliveTimer = [NSTimer scheduledTimerWithTimeInterval:20.0
target:self
selector:@selector(callEveryTwentySeconds)
userInfo:nil
repeats:YES];
//
// Code to call our web service in a background thread and wait
// for it to finish (which might take a few minutes)
//
// Kill off our "Stay alive" timer, and allow the device to Auto Lock whenever it wants.
[self.stayAliveTimer invalidate];
// Give our device permission to Auto-Lock when it wants to again.
[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
}
En realidad, Apple?
Es 2015, y Xcode es realmente sigue siendo tan malo ...?
Espero que este código ayude a otras víctimas de Xcode.
Si no existiera el método, la aplicación se estrellaría en tiempo de ejecución, suponiendo que las personas con discapacidad o ignorado las advertencias del compilador ... – benzado