2011-06-28 5 views
1

J'essaie de charger un paramètre utilisateur dans un contrôle segmenté. NSUserDefault lit correctement et la préférence est correctement traduite dans un index. Toutefois, le contrôle segmenté ne semble pas répondre à la définition de l'index, préférant rester à l'index 0.UISegmentedControl: définir par programme l'index?

Le code clean est compilé avec -Wall -Wextra et clang ne signale aucun problème. J'ai aussi couru avec des fuites et des zombies - OK. Et les ASSERTs ci-dessous ne tirent pas.

Les UISegmentedControl ont été créés en utilisant Interface Builder (il y a 4 total sur la vue). J'ai vérifié les connexions. J'ai essayé d'appeler -loadPreferences dans -viewDidLoad, -viewWillAppear, et -viewDidAppear.

Y a-t-il des astuces qui me manquent? Devrais-je appeler un needsUpdate ou une autre méthode pour obtenir les contrôles à repeindre?

Jeff

-(void)loadPreferences 
{ 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    ... 

    int days = [userDefaults integerForKey:kDirtyAfter]; 
    ASSERT(IsValidDirtyDays((DirtyDays)days)); 
    if(!IsValidDirtyDays((DirtyDays)days)) 
     days = (int)DirtyDaysDefault; 

    int idx; 
    switch(days) 
    { 
     case DirtyDays1: idx = 0; break; 
     case DirtyDays3: idx = 1; break; 
     case DirtyDays7: idx = 2; break; 
     case DirtyDays14: idx = 3; break; 
     case DirtyDays28: idx = 4; break; 
     default: idx = 1; 
    } 

    // dirtyAfterSegment.selectedSegmentIndex = idx; 
    [dirtyAfterSegment setSelectedSegmentIndex:idx]; 
    ASSERT(dirtyAfterSegment.selectedSegmentIndex == idx); 
} 

Répondre

1

Si le Assertion ne se déclenche pas, alors quelque chose doit être en train de changer l'indice à 0 après ce code, ou le code lui-même utilise toujours la première déclaration de cas.

Créez une action sur valueChanged pour le segment et définissez un point d'arrêt dans cette action pour voir à quel moment le segment est modifié et qui le modifie.

+0

Merci Kendall. J'ai copié un copier/coller, qui apparaissait dans '-valueChanged'. – jww

0

Vous avez dit avoir créé les contrôles segmentés dans le constructeur d'interface, avez-vous créé des IBOutlets pour eux et les avez-vous également connectés?

Questions connexes