2010-04-21 3 views
0

Je jouais autour de mon application et je basculais un UISwitch très vite (qui peut résister?). Donc, je l'ai basculé très vite pour 10-15 fois, un tableau qui devrait contenir les données de la cellule de vue de la table dans laquelle j'ai mon commutateur, soit a des copies supplémentaires de la même cellule ou juste une copie (le cas correct) ou pas de données du tout. L'application fonctionne bien si elle est basculée à la vitesse normale.UISwitch rapide basculer plusieurs fois

Je suis sûr que ce scénario ne se produira pas vraiment avec mes utilisateurs, mais je suis toujours curieux de savoir pourquoi cela se produit.

Merci, Teja

Edit: Ajout de code. Cette méthode est appelée chaque fois que le commutateur est basculé.

-(void)saveOptionChanged:(id) sender 
{ 
UISwitch *sw = (UISwitch *) sender; 
//int tag = current.tag; 
BOOL status = (BOOL) [sw isOn]; 
NSInteger tag = sw.tag; 
NSInteger row1 = tag%1000; 
NSInteger section1 = (tag - row1)/1000; 
DiagDetails *temp = [preferences getDiagElementAt:section1 row:row1]; 
temp.ICD9Code= [temp.ICD9Code stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
temp.ICD9Desc= [temp.ICD9Desc stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
NSLog(@"Adding %@ - %@",temp.ICD9Code, temp.ICD9Desc); 
NSLog(@"tag = %ld, row = %ld, section = %ld",tag,row1,section1); 
if(status) { 
    BOOL returnVal = YES; 
    returnVal = [currentPatient addICD9Code:temp]; 
    if(!returnVal) { 
     UIAlertView *error = [[UIAlertView alloc] initWithTitle:@"Diagnosis add error" message:@"" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [error show]; 
     [error release]; 
     [sw setOn:NO]; 
    } 
} 
else { 
    DiagDetails *temp = [preferences getDiagElementAt:section1 row:row1]; 
    [currentPatient removeICD9Code:temp.ICD9Code]; 
} 
} 
+0

il est impossible de dire sans voir le code ... que fait le commutateur? – prendio2

Répondre

0

Si je devais deviner, vous êtes des événements trigging si vite qu'ils pourraient fusionner ou se sautée, donc si vous définissez implicitement état en fonction du nombre de fois que le gestionnaire d'événements est appelé, vous pourriez sortir de la synchronisation. (Au lieu de cela, vous devez déterminer explicitement l'état du UISwitch - activé ou désactivé - dans le gestionnaire d'événements.) Vous devrez afficher plus de code pour être sûr. Au moins le code du gestionnaire d'événements pour l'événement d'état modifié UISwitch.