2014-02-08 41 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如何使用可選方法以及所需方法的示例。