0

J'ai un NSSegmentedControl avec deux segments définis sur le mode "Select None" dans Interface Builder. Peu importe ce que j'essaie, je ne peux pas obtenir -selectedSegment pour retourner tout sauf 0, même si le segment 0 est même désactivé par défaut et ne peut être sélectionné. Voici la fonction correspondante qui est appelée lorsque vous cliquez sur un segment sur le contrôle:NSSegmentedControl -selectedSegment renvoie toujours 0

-(IBAction)changeStep:(id)sender 
{ 
    [stepContainer setHidden:TRUE]; 
    [(NSView *)[[wizard stepArray] objectAtIndex:(NSInteger)[wizard step]] removeFromSuperview]; 
    switch ([[navigationButton cell] selectedSegment]) 
    { 
    case 0: 
     [wizard setStep:(NSInteger *)[wizard step]-1]; 
     break; 
    case 1: 
     [wizard setStep:(NSInteger *)[wizard step]+1]; 
     break; 
    default: 
     break; 
    } 
    //[[navigationButton cell] setSelected:FALSE forSegment:[navigationButton selectedSegment]]; 

    if ([wizard step] > 0) 
    { 
     [wizard setStep:0]; 
     [navigationButton setEnabled:FALSE forSegment:0]; 
    } 

    NSLog(@"%d", [wizard step]); 
    [stepContainer addSubview:(NSView *)[[wizard stepArray] objectAtIndex:(NSInteger)[wizard step]]]; 
    [stepContainer setHidden:FALSE withFade:TRUE]; 
} 

J'ai aussi essayé d'utiliser -isSelectedForSegment, mais il a le même résultat.
Toute aide que vous pourriez fournir serait génial, je n'ai aucune idée de ce que je fais mal. Merci!
SphereCat1

EDIT: Ce est un moment de facepalm, voir ma réponse ci-dessous.

Répondre

1

D'accord, c'est un moment de facepalm. Il s'avère que je NSLogging la mauvaise chose, et il y a juste une erreur dans ma logique d'incrément/décrément.

Encore mieux! :)

facepalm
SphereCat1

0

Etes-vous sûr que navigationButton est initialisé? Mettez une déclaration NSLog comme ceci:

NSLog (@"%@", navigationButton); 

Si vous un message d'un objet nil, vous obtiendrez 0 en conséquence. Si navigationButton est IBOutlet, vous devez vous assurer qu'il est correctement connecté dans Interface Builder.

+0

Il est en effet initialisé. Le NSLog renvoie vilhalmer

1

Vous semblez faire beaucoup de casting dans des endroits que vous ne devriez pas besoin.

[(NSView *)[[wizard stepArray] objectAtIndex:(NSInteger)[wizard step]] removeFromSuperview]; 

Que renferme [wizard step]? Vous ne devriez pas avoir besoin de le lancer.

[wizard setStep:(NSInteger *)[wizard step]-1]; 

Ceci est encore plus incohérent. NSInteger * est un type de pointeur (NSInteger n'est pas un objet). Si [wizard setStep:] prend un NSInteger *, c'est probablement parce qu'il est utilisé comme paramètre inout, peut-être pour vous fournir la nouvelle étape si elle est différente de celle demandée. Dans ce cas, vous devez faire quelque chose comme ceci:

NSInteger newStep = [wizard step] - 1; 
[wizard setStep: &newStep]; 
+0

Vous avez raison, c'était inutile. Je pense que j'avais une fonction différente à l'origine, et je n'ai pas supprimé la distribution quand je l'ai changée. Merci d'avoir fait remarquer cela! – vilhalmer