2009-11-03 2 views
1

J'ai un petit problème. Je suis un débutant à la programmation iPhone alors s'il vous plaît pardonnez-moi si la réponse est évidente.Le niveau de batterie ne sera pas mis à jour

J'ai trouvé la charge actuelle et je veux la mettre à jour continuellement pendant que mon application est en cours d'exécution. J'ai essayé ceci:

- (void) viewWillAppear:(BOOL)animated 
{ 

NSLog(@"viewWillAppear"); 
double level = [self batteryLevel]; 
currentCharge.text = [NSString stringWithFormat:@"%.2f %%", level]; 
timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:selfselector:@selector(updateBatteryLevel:) userInfo:nil repeats:NO]; 
[super viewWillAppear:animated]; 
} 

Je reçois correctement la lecture au début, mais il n'est pas mis à jour. Toute aide serait très appréciée!

Un grand merci,

Stuart

Répondre

6

Pourquoi attendriez-vous le code ci-dessus pour la mise à jour continue? Vous définissez la valeur une fois lorsque la vue apparaît. Si vous voulez le mettre à jour continuellement, vous devez vous enregistrer pour les mises à jour de l'état de la batterie et redessiner le texte quand il change. Sans voir le code de vos routines batteryLevel et updateBatteryLevel:, il n'y a aucun moyen de savoir réellement ce que vous faites ou pourquoi ils vont mal. Cela dit, je n'utiliserais pas un événement de minuterie pour cela, c'est assez inefficace. Vous voulez utiliser KVO à la place:

- (void) viewWillAppear:(BOOL)animated { 
    UIDevice *device = [UIDevice currentDevice]; 
    device.batteryMonitoringEnabled = YES; 
    currentCharge.text = [NSString stringWithFormat:@"%.2f", device.batteryLevel]; 
    [device addObserver:self forKeyPath:@"batteryLevel" options:0x0 context:nil]; 
    [super viewWillAppear:animated]; 
} 

- (void) viewDidDisappear:(BOOL)animated { 
    UIDevice *device = [UIDevice currentDevice]; 
    device.batteryMonitoringEnabled = NO; 
    [device removeObserver:self forKeyPath:@"batteryLevel"]; 
    [super viewDidDisappear:animated]; 
} 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    UIDevice *device = [UIDevice currentDevice]; 
    if ([object isEqual:device] && [keyPath isEqual:@"batteryLevel"]) { 
    currentCharge.text = [NSString stringWithFormat:@"%.2f", device.batteryLevel]; 
    } 
} 
+0

Je travaille maintenant, merci beaucoup Louis. Comme je l'ai dit, je suis en train d'apprendre et je peux maintenant le faire correctement dans le futur. Merci encore! – Stumf

Questions connexes