我有一个带有IBAction的类(dicecontroller),它将触发一些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


骰子控制器

@interface diceController : NSObject

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

@end


骰子控制器

#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

最佳答案

问题在这里:


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


diceController实例是一个新实例(在此行中创建)。这与您已经在笔尖中放置并配置的diceController实例不同。

如果您的playerCommand实例需要在笔尖中引用您的diceController实例,则可以在playerCommand中创建IBOutlet并将其连接到笔尖中的diceController实例。

BTW,playerCommanddiceController应分别命名为PlayerCommandDiceController

关于objective-c - IBOutlet已连接但无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15443907/

10-12 04:33