En mi aplicación tengo un UIProgressView que necesita aumentar en +0.1 cada 5 minutos. El método para hacerlo, pero sé que tengo un problema, porque me gustaría que la vista de progreso de los cálculos de cinco minutos, incluso si mi aplicación está cerrada, dependa de tiempo real (reloj de iPhone) y no cuando mi aplicación esté abierta. . Lo explicaré

  1. Abro mi aplicación y empiezo a contar los minutos.
  2. Luego cierro mi aplicación
  3. Abro mi aplicación después de 10 minutos
  4. el progreso de mi vista debe tener un valor de +0.2 (0.1 cada 5 minutos)

Sé que para hacer eso debería usar NSDate pero no puedo implementarlo de la manera correcta, ¿alguien podría ayudarme con un ejemplo para comprender mejor cómo implementar esto?

Gracias a todos

En pocas palabras, lo que busco es que el aumento de uiprogressview debe obtenerse desde el reloj de los minutos del iPhone ... esto tiene que suceder si la aplicación está abierta o cerrada ... solo un minuto más llega uiprogressview debe cambiar. En resumen, esto debería ser una recuperación de energía de un usuario

-1
kAiN 21 mar. 2017 a las 23:32

2 respuestas

La mejor respuesta

Creo que deberías:

  1. Almacene la fecha de inicio en alguna variable: NSDate *startDate = [NSDate new];

Guardar la fecha de inicio real en NSUserDefaults:

[[NSUserDefaults standardDefaults] setObject: startDate forKey: @"MyKey"];

  1. Luego, cuando su aplicación se active, obtenga la fecha de NSUserDefaults, calcule el intervalo de tiempo entre la fecha guardada y la fecha real:

NSTimeInterval secondsBetween = [[NSDate new] timeIntervalSinceDate: savedDate];

  1. Ahora puede dividir el resultado por su intervalo de progreso (supongo que en ViewWillAppear):

progress = secondsBetween/(5*60) * 0.1

Si desea actualizar su progreso después de cada unidad de tiempo cuando su ViewController está activo, debe usar NSTimer:

[NSTimer scheduledTimerWithTimeInterval: (5 * 60)
    target:self
    selector:@selector(refreshProgressMethod)
    userInfo:nil
    repeats:YES];
1
Jakub Tudruj 21 mar. 2017 a las 22:02

Al iniciar la aplicación o cuando desee que comience el progreso, almacene la hora actual:

let startTime = NSDate()

Luego, al actualizar (puede mediante la configuración del temporizador para disparar cada pocos minutos, o en viewDidAppear ()):

let timeDelta = Date().timeIntervalSince(startTime)
progressBar.progress =  timeDelta/(60 * 5) * 0.1

Actualización: Parece que OP necesita saber cómo persistir el tiempo de inicio del progreso entre la finalización de la aplicación y el nuevo lanzamiento. Al igual que la otra respuesta, puede usar UserDefaults y verificar si ya existe una hora de inicio. Si existe, úselo; de lo contrario, cree una nueva entrada como esta:

let userDefaultKey = "startTime"
var startTime = UserDefaults.standard.object(forKey: userDefaultKey)
if (startTime == nil)
{
   startTime = Date()
   UserDefaults.standard.set(startTime, forKey: userDefaultKey)
}
0
Garfield81 22 mar. 2017 a las 19:09