1
我有存储我的文档数据的类A(NSDocument子类)。 A类创建一个管理视图的类B(NSView子类)的实例。我希望它每次调用B类的drawRect:方法时都会调用updateChangeCount:在A类上,以便用户知道要保存文档。实例创建者作为接收者的调用方法
我有存储我的文档数据的类A(NSDocument子类)。 A类创建一个管理视图的类B(NSView子类)的实例。我希望它每次调用B类的drawRect:方法时都会调用updateChangeCount:在A类上,以便用户知道要保存文档。实例创建者作为接收者的调用方法
我并不完全熟悉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
如何使用可选方法以及所需方法的示例。
DrawRect不应该改变状态。永远。 –
对不起,我对此很感兴趣。你能解释为什么吗? – PopKernel
由于-drawRect:可能因多种原因(调整大小,打印,截图等)而被调用,并且应该只处理绘图,没有别的。 –