2013-03-15 1 views
0

J'avais une classe (dicecontroller) avec un IBAction et qui déclencherait quelques IBOutlets, tout était heureux. J'ai depuis trouvé un meilleur moyen d'organiser mon code et de mettre l'IBAction dans une classe différente (playercommand). playercomman appelle une méthode dans dicecontroller qui a tous les IBOutlets, sauf que maintenant aucun des points de vente n'affiche quoi que ce soit. J'ai reconnecté les prises avec le xib, même fait de nouvelles prises, aucune forme d'IBOutlets ne semble fonctionner. Cependant NSLog fonctionne très bien et le tableau que je passe est bien reçu.IBOutlet connecté mais ne fonctionnait pas

J'ai eu des problèmes avec Xcode agissant bizarre et se brisant récemment, qui a été corrigé en réinstallant Xcode, je l'ai fait à nouveau en pensant que cela pourrait être un autre problème, mais pas d'amour. Je pense que c'est une nuance d'IB que je ne sais pas à propos de

Je ne sais pas vraiment comment chercher ça, essayant de trouver quelque chose pendant des heures. L'aide serait encourageante.

PlayerCommand.h

#import "DiceRoll.h" 
#import "diceController.h" 

@interface playerCommand : NSObject 

- (IBAction)roll:(NSButton *)sender; 

@end 

Playercommand.m

#import "playerCommand.h" 

@implementation playerCommand 

- (IBAction)roll:(NSButton *)sender { 

    DiceRoll *currentTurn = [[DiceRoll alloc] init]; 
    [currentTurn rolldice]; 

    diceController *currentFields = [[diceController alloc] init]; 
    [currentFields updatetockNameField:[currentTurn diceValuesArray]]; 

} 
@end 

dicecontroller.h

@interface diceController : NSObject 

-(void)updatetockNameField: (NSArray*) diceValues; 

@end 

dicecontroller.m

#import "diceController.h" 

// declaring private properties 

@interface diceController() 

@property (weak) IBOutlet NSTextField *ActionField; 

@property (weak) IBOutlet NSTextField *QuantityField; 

@end 

@implementation diceController 

-(void)updatetockNameField:(NSArray *) diceValues { 

    switch ([[diceValues objectAtIndex:2] integerValue]) { 
     case 0 ... 1: 
     [[self ActionField] setStringValue:@"Up"]; 
     break; 
     case 2 ... 3: 
     [[self ActionField] setStringValue:@"Down"]; 
     break; 
     case 4 ... 5: 
     [[self ActionField] setStringValue:@"Div"]; 
     break; 
     default: 
     [[self ActionField] setStringValue:@"Err"]; 
     break; 
    } 

    switch ([[diceValues objectAtIndex:2] integerValue]) { 
     case 0 ... 1: 
     [[self QuantityField] setIntegerValue:5]; 
     break; 
     case 2 ... 3: 
     [[self QuantityField] setIntegerValue:10]; 
     break; 
     case 4 ... 5: 
     [[self QuantityField] setIntegerValue:20]; 
     break; 
     default: 
     [[self QuantityField] setStringValue:@"E"]; 
     break; 
    } 

} //end of updatetockNameField method 


@end 
+0

Pls poster du code, en particulier un exemple des appels dans "cette classe appelle celle avec les IBOutlets". Donnez aussi des noms aux classes "that" et "this", etc., afin que les gens puissent se référer à ces noms dans leurs réponses. –

Répondre

1

La question est ici:

diceController *currentFields = [[diceController alloc] init];

Cette instance diceController est une nouvelle instance (vous créez dans cette ligne). Ce n'est pas la même instance diceController que vous avez déjà placée et configurée dans votre plume.

Si votre playerCommand exemple besoin d'une référence à votre diceController exemple dans la pointe, alors vous pouvez faire un IBOutlet dans playerCommand et se connecter à l'instance qui diceController dans votre nib.

BTW, playerCommand et diceController doivent être nommés PlayerCommand et DiceController, respectivement.

+0

Voulez-vous dire que la plume crée une instance du contrôleur de dés? Donc il y a deux instances de contrôleur de dés, et mon codé ne se rapporte pas à la plume. Merci BTW pour votre aide! – Joonstar

+0

Lorsque la pointe est chargée, une instance est créée. Et c'est vrai, cette instance est différente de celle que vous avez créée dans le code. Ils sont de la même classe, mais ils sont deux instances différentes de cette classe. –

+0

Est-ce une invention générale de garder IBActions et IBOutlets dans la même instance afin d'éviter des situations comme celles-ci? – Joonstar