2009-08-02 10 views
0

Je travaille sur la mise à niveau de mon application vers la version 3.0, et un nouveau bogue a été développé qui n'existait pas dans 2.2.1 (en fait, c'est le seul problème que j'ai eu en mettant à jour ... autre qu'un setText: est l'avertissement déprécié)Activer/Désactiver le commutateur dans la cellule (bug 2.2.1 à 3.0)

J'ai un tableView avec des cellules qui ont des contrôles de commutateur sur eux. Avec viewWillAppear, je définis ces commutateurs en fonction des valeurs lues dans un fichier plist. Problème: maintenant que j'ai converti en version 3.0, je dois utiliser le tabBar pour aller et venir entre cette tableView et l'une des autres vues deux fois avant de définir les valeurs du commutateur. En utilisant le débogueur la première fois et la deuxième fois que j'ai vérifié il passe par la fonction "refreshSwitches" les deux fois .... c'est-à-dire qu'il n'y a pas de différence dans le code/les fonctions ... sur le premier, deuxième, ou à tout moment ci-après.

Les valeurs sont lues correctement à partir du plist, mais tous les commutateurs sont éteints ... lors de la première apparition de la vue ?? Des idées.


Voici le code qui a fonctionné en 2.2.1, mais pas en 3.0. Note: J'ai jeté dans un AlertView pour le débogage (ainsi que l'utilisation des outils de débogage normale) ...

la première fois que je vais à l'opinion que je reçois sur le AlertView:

1 EST PAS sur

la deuxième (et tout le temps restant) je vais à la vue que je reçois sur le AlertView:

1 est sur

// I've Tried viewDid and Will Appear, both have the same result. 
    - (void)viewDidAppear:(BOOL)animated 
{ 
    [self refreshView]; 
} 

- (void)refreshView{ 
    UITableViewCell *cell; 
    UISwitch *switchView; 
    NSIndexPath *indexPath; 

    indexPath = [NSIndexPath indexPathForRow:0 inSection:1]; 
    cell = [thisTableView cellForRowAtIndexPath:indexPath]; 
    switchView = (UISwitch *)[cell viewWithTag:kSwitchTag]; 
    switchView.on = ([SharedClass sharedSharedClass].tempVar == 1) ? YES : NO; 

    NSString *baseString = @"%u %@."; 
    NSString *onString = (switchView.on) ? @"IS on" : @"IS NOT on"; 
    NSString *messageString = [[NSString alloc] initWithFormat:baseString, [SharedClass sharedSharedClass].tempVar, onString]; 

    // TEMP DEBUG ALERTVIEW 

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"INDICATOR Row Selected"         message:messageString             delegate:nil 
cancelButtonTitle:@"Thanks"         otherButtonTitles:nil]; 

[alert show]; 
[alert release]; 
[messageString release]; 

[self.thisTableView reloadData]; 

} 

pour répondre à la question sur la cellule ... Je ne suis pas t "passant" une cellule à la méthode, je suis en train de définir l'indexPath et de créer un pointeur sur la cellule pour avoir accès au contrôle du commutateur sur la cellule. Donc non, je ne pense pas que ça serait nulle part. Je pense que la cellule et le tableView existent puisque je n'essaie pas de faire le pointeur vers la cellule jusqu'à ce que viewWill ou viewDid apparaissent

Répondre

0

Etes-vous sûr que la cellule transmise à cette méthode est toujours nulle? Cela expliquerait pourquoi la valeur est désactivée, après que vous l'avez défini sur ...

Questions connexes