2013-03-15 5 views
0

У меня был класс (dicecontroller) с IBAction, и это вызовет некоторые IBOutlets, все были счастливы. С тех пор я нашел лучший способ организовать мой код и поместить IBAction в другой класс (команда игрока). playercomman называет метод в dicecontroller, который имеет все IBOutlets, за исключением того, что ни один из выходов ничего не отображает. Я снова подключил выходы к xib, даже сделал новые выходы, ни одна форма IBOutlets, похоже, не работает. Однако NSLog работает очень хорошо, и массив, с которым я его передаю, получает штраф.IBOutlet подключен, но не работает

У меня возникли проблемы с тем, что Xcode действовал странно и рушится недавно, что было исправлено путем переустановки Xcode, я сделал это снова, думая, что это может быть еще один сбой, но нет любви. Я думаю, что это какой-то нюанс IB, который я просто не знаю о

Я также не знаю, как это выглядеть, пытался что-то найти в течение нескольких часов. Помощь будет обнадеживающей.

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 отправляет некоторый код, в частности пример вызовов в том, что этот класс вызывает тот, у кого есть IBOutlets. Также дайте имена классу «тот» и «этот» класс и т. Д., Чтобы люди могли ссылаться на эти имена в своих ответах на вас. –

ответ

1

вопрос здесь:

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

Это diceController экземпляр нового экземпляра (вы создаете его в этой строке). Это не тот самый экземпляр diceController, который вы уже разместили и настроили в своем наконечнике.

Если playerCommand экземпляр необходима ссылка на ваш diceController, например, в бобах, то вы можете сделать IBOutlet в playerCommand и подключить, что к примеру diceController в вашем СИБ.

BTW, playerCommand и diceController следует называть PlayerCommand и DiceController, соответственно.

+0

Вы говорите, что nib создает экземпляр контроллера кости? Итак, есть два экземпляра контроллера кубиков, а мой закодированный не относится к наконечнику? Спасибо вам за помощь! – Joonstar

+0

Когда загружается nib, создается экземпляр. И это верно, этот экземпляр отличается от того, который вы создали в коде. Они одного класса, но это два разных экземпляра этого класса. –

+0

Является ли общее изобретение поддерживать IBActions и IBOutlets в одном и том же экземпляре, чтобы избежать подобных ситуаций? – Joonstar

Смежные вопросы