2016-10-31 1 views
0

Aide s'il vous plaît. J'ai 4 NSButtons dans ma fenêtre (configuré en style de dégradé) et en fonction de l'entrée de l'utilisateur, je fais la couleur du bouton l'une des quatre couleurs différentes (via setImage en utilisant des fichiers .png). Mon code, qui fonctionne très bien est:Erreur lors de la sauvegarde du nom d'IBOutlet NSButton dans le tableau, puis de l'accès au tableau à setImage sous NSButton

if ([[ranColors objectAtIndex:0] isEqualToString:@"red"]) { 
    [color1 setImage:[NSImage imageNamed:@"Red.png"]]; 
} 
else if ([[ranColors objectAtIndex:0] isEqualToString:@"yellow"]) { 
    [color1 setImage:[NSImage imageNamed:@"Yellow.png"]]; 
} 
else if ([[ranColors objectAtIndex:0] isEqualToString:@"blue"]) { 
    [color1 setImage:[NSImage imageNamed:@"Blue.png"]]; 
} 
else { 
    [color1 setImage:[NSImage imageNamed:@"Green.png"]]; 
} 

Je répète ce code 4 fois pour les 4 boutons (color1, color2, color3 et color4). ranColors est un tableau qui contient la sélection de couleur de l'utilisateur. J'essaie de simplifier le code en utilisant un NSArray pour maintenir les noms de boutons IBOutlet: color1, color2, color3 et color4, puis en utilisant une boucle for à travers les 4 cycles. Voici le code:

for (int x = 0; x < 4; ++x) { 
if ([[ranColors objectAtIndex:x] isEqualToString:@"red"]) { 
    [[revealPositions objectAtIndex:x] setImage:[NSImage imageNamed:@"Red.png"]]; 
    } 
else if ([[ranColors objectAtIndex:x] isEqualToString:@"yellow"]) { 
    [[revealPositions objectAtIndex:x] setImage:[NSImage imageNamed:@"Yellow.png"]]; 
    } 
else if ([[ranColors objectAtIndex:x] isEqualToString:@"blue"]) { 
    [[revealPositions objectAtIndex:x] setImage:[NSImage imageNamed:@"Blue.png"]]; 
    } 
else { 
    [[revealPositions objectAtIndex:x] setImage:[NSImage imageNamed:@"Green.png"]]; 
    } 
} 

Je reçois l'erreur: [__NSCFConstantString setImage:]: sélecteur non reconnu envoyé à l'instance 0x100006098. L'erreur se produit lorsque je lis l'élément de tableau et que j'essaie ensuite de définir setImage dans le bon fichier. Il semble que je ne peux pas stocker le nom IBOutlet pour le bouton dans un tableau, puis accéder à ce nom et lui définir une propriété.

Toute aide serait appréciée.

Répondre

0

Si vous souhaitez que la chaîne soit identique au nom du fichier, vous pouvez définir toutes les couleurs sans boucle.

[color1 setImage:[NSImage imageNamed:[NSString stringWithFormat:@"%@.png",[ranColors objectAtIndex:0]]]]; 
[color2 setImage:[NSImage imageNamed:[NSString stringWithFormat:@"%@.png",[ranColors objectAtIndex:1]]]]; 
[color3 setImage:[NSImage imageNamed:[NSString stringWithFormat:@"%@.png",[ranColors objectAtIndex:2]]]]; 
[color4 setImage:[NSImage imageNamed:[NSString stringWithFormat:@"%@.png",[ranColors objectAtIndex:3]]]]; 

Êtes-vous sûr que [revealPositions objectAtIndex:x] stocke un NSButton Postez le code où vous stockez UIButton dans ce tableau des éclaircissements.

Reculez si cela a fonctionné ou non.

+1

A travaillé comme un charme - merci! – Keith

+0

C'est génial! S'il vous plaît accepter la réponse. Codage heureux! – Yan

+1

Désolé, j'ai oublié de le faire. – Keith