使用实例创建者作为接收者的调用方法

时间:2014-02-08 13:48:43

标签: objective-c cocoa

我有一个A类,(NSDocument子类),它存储我的文档数据。 A类创建了一个管理视图的B类实例(NSView子类)。我想要它,以便每次调用类B的drawRect:方法时,它调用类A上的updateChangeCount:以便用户知道保存文档。

1 个答案:

答案 0 :(得分:1)

我并不完全熟悉OSX项目以及drawRect:NSView的确切了解,所以您可能需要查看Richard J Ross III的评论。但是关于一个对象调用实例化对象的方法的一般问题:

<强> ClassB.h

@protocol ClassBDelegate <NSObject>
@reqiured
- (void)someRequiredMethod;
@optional
- (void)someOptionalMethod;
@end

@interface ClassB <NSView>
@property (nonatomic, assign) id<ClassBDelegate> delegate;
// Other stuff you need in your interface
@end

<强> ClassB.m

- (void)someClassBMethodThatNeedsToTriggerSomeClassAMethod {
    // stuff
    [self.delegate someRequiredMethod];

    if ([self.delegate respondsToSelector:@selector(someOptionalMethod)]) {
        [self.delegate someOptionalMethod];
    }
    // stuff
}

现在,在ClassA中,请确保遵守此协议:

#import ClassB.h

@interface ClassA <ClassBDelegate>

并实施所需的方法:

- (void)someRequiredMethod {
    // stuff
    NSLog(@"Hello world!");
    // stuff
}

当您实例化ClassB对象时,请务必将其委托设置为自己:

classB.delegate = self;  

编辑:注意,我举了一个例子,说明ClassB如何使用可选方法以及所需的方法。