IBOutlet подключен, но не работает

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

У меня были проблемы с тем, что 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

person Joonstar    schedule 15.03.2013    source источник
comment
Пожалуйста, опубликуйте некоторый код, в частности пример вызовов в этом классе, который вызывает тот, у которого есть IBOutlets. Также, пожалуйста, дайте названия этому классу, этому классу и т. д., чтобы люди могли ссылаться на эти имена в своих ответах вам.   -  person Firoze Lafeer    schedule 16.03.2013


Ответы (1)


Проблема здесь:

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

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

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

Кстати, playerCommand и diceController должны называться PlayerCommand и DiceController соответственно.

person Firoze Lafeer    schedule 16.03.2013
comment
Вы говорите, что перо создает экземпляр контроллера костей? Итак, есть два экземпляра контроллера костей, и мой закодированный не относится к перу? Спасибо БТВ за помощь! - person Joonstar; 16.03.2013
comment
Когда наконечник загружается, создается экземпляр. И правильно, этот экземпляр отличается от того, который вы создали в коде. Они принадлежат к одному классу, но являются двумя разными экземплярами этого класса. - person Firoze Lafeer; 16.03.2013
comment
Является ли общим изобретением хранить IBActions и IBOutlets в одном экземпляре, чтобы избежать подобных ситуаций? - person Joonstar; 16.03.2013
comment
Не думаю, что я бы сказал это как общепринятое правило, но я действительно думаю, что то, как вы это сделали здесь, кажется мне немного странным. Трудно сказать с уверенностью, не зная больше о том, что вы строите. На данный момент, я надеюсь, вы видите, что это не сбой в IB или Xcode, это просто разные экземпляры класса. - person Firoze Lafeer; 16.03.2013
comment
В общем, я понимаю, что здесь происходит. Обязательно переделаю. Спасибо за ваше время и терпение! - person Joonstar; 16.03.2013