0

我有一个带有 IBAction 的类(dicecontroller),它会触发一些 IBOutlets,一切都很开心。从那以后,我找到了一种更好的方法来组织我的代码并将 IBAction 放在不同的类(playercommand)中。playercomman 调用 dicecontroller 中的一个方法,该方法具有所有 IBOutlets,但现在没有一个 outlet 显示任何内容。我用 xib 重新连接了网点,甚至制作了新的网点,但似乎没有任何形式的 IBOutlets 可以工作。但是 NSLog 工作得很好,我传递的数组也被很好地接收了。

我最近遇到了 Xcode 表现怪异和崩溃的问题,这通过重新安装 Xcode 得到了修复,我再次这样做,认为这可能是另一个故障,但没有爱。我在想这是我不知道的 IB 的一些细微差别

我也真的不知道如何查找这个,一直试图找到几个小时的东西。帮助将是令人鼓舞的。

玩家命令.h

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

@interface playerCommand : NSObject

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

@end

玩家命令.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

骰子控制器.h

@interface diceController : NSObject

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

@end

骰子控制器.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
4

1 回答 1

1

问题在这里:

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

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

如果您的playerCommand实例需要diceController在 nib 中引用您的实例,那么您可以在其中创建一个 IBOutletplayerCommand并将其连接到diceController您的 nib 中的实例。

顺便说一句,playerCommand应该diceController分别命名为PlayerCommandDiceController

于 2013-03-16T00:59:22.463 回答