Objective c 在子类(Cocoa OSX)中使用IBOutlet

Objective c 在子类(Cocoa OSX)中使用IBOutlet,objective-c,macos,cocoa,Objective C,Macos,Cocoa,好的,我有一个名为“AmazingClass”的类,我用它生成一个工作表来保存文件。其中有一个带有额外选项的NSView。它工作得很好,但现在我希望有更多具有相同功能的窗口,但使用不同的选项,因为它们应该保存不同的文件格式 基本布局如下所示: AmazingClass.h #import <Cocoa/Cocoa.h> @interface AmazingClass : NSObject { NSView * _accessoryView; BOOL _pr

好的,我有一个名为“AmazingClass”的类,我用它生成一个工作表来保存文件。其中有一个带有额外选项的NSView。它工作得很好,但现在我希望有更多具有相同功能的窗口,但使用不同的选项,因为它们应该保存不同的文件格式

基本布局如下所示:

AmazingClass.h

#import <Cocoa/Cocoa.h>

@interface AmazingClass : NSObject {
    NSView * _accessoryView;
    BOOL     _prepared;
}
@property (assign, nonatomic) IBOutlet NSView * accessoryView;
@property (copy, nonatomic) NSString * nibForAcessoryView;
// Methods that generate the save window
- (void) prepareToRun;
@end
#import "AmazingClass.h"

@interface NotSoAmazing : AmazingClass {
    IBOutlet NSView * subAccessoryView;
}
@end
现在我想使用同一个类来处理不同的NSView,如下所示:

不太令人惊奇。h

#import <Cocoa/Cocoa.h>

@interface AmazingClass : NSObject {
    NSView * _accessoryView;
    BOOL     _prepared;
}
@property (assign, nonatomic) IBOutlet NSView * accessoryView;
@property (copy, nonatomic) NSString * nibForAcessoryView;
// Methods that generate the save window
- (void) prepareToRun;
@end
#import "AmazingClass.h"

@interface NotSoAmazing : AmazingClass {
    IBOutlet NSView * subAccessoryView;
}
@end
notsomazing.m

#import "AmazingClass.h"

@implementation AmazingClass
@synthesize accessoryView = _accessoryView;
@synthesize nibForAcessoryView;
// Other stuff here
- (void) prepareToRun {
    // stuff here
    if ([self nibForAcessoryView] == nil) {
        [self setNibForAcessoryView: @"AmazingWindow"];
    }

    [NSBundle loadNibNamed:[self nibForAcessoryView] owner:self];

    _prepared = YES;
}
#import "NotSoAmazing.h"

@implementation NotSoAmazing

- (void) prepareToRun {
    [self setAccessoryView:subAccessoryView];
    [self setNibForAcessoryView: @"NotSoAmazingWindow"];
    [super prepareToRun];
}
然后我创建一个新的NSView,该文件的所有者将其设置为类“notsomazing”,我在接口中创建所有链接并执行代码


如果有一个接口链接到原始类,我将使用原始接口而不是备用接口。如果删除所有链接,则不会显示任何内容


因此,我的问题是:我如何处理子类中的iboutlet以采用不同的视图?

子类与父类一样具有outlet没有问题。在这种情况下,
AmazingView
有一个插座,
accessoryView
,而
notsomazing
有两个插座:
accessoryView
subAccessoryView

我不清楚您是否希望
notsomazing
从与
AmazingView
相同的nib加载其
accessoryView
,或者是否希望将其连接到
notsomazing
的nib中的不同视图。如果您在
notsomazing
中调用
-setNibForAccessoryView:
,并将其设置为不同的nib文件,我猜是后者。此外,如果要从nib加载
子AccessoryView
(或者,如果不是,为什么它是一个插座?),我看不到调用
[self-setAccessoryView:subAccessoryView]
的逻辑


看起来你走的是对的,但是你需要决定你到底想发生什么。您想从同一个nib加载两个视图,还是从两个不同的nib加载两个视图?

“如果有一个接口链接到原始类,我将使用原始接口,而不是备用接口。如果删除所有链接,则不显示任何内容。”这是什么意思?你在这里使用界面和链接是什么意思?