2014-02-08 43 views
1

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

+2

DrawRect不应该改变状态。永远。 –

+0

对不起,我对此很感兴趣。你能解释为什么吗? – PopKernel

+0

由于-drawRect:可能因多种原因(调整大小,打印,截图等)而被调用,并且应该只处理绘图,没有别的。 –

回答

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如何使用可选方法以及所需方法的示例。