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:可能因多種原因(調整大小,打印,截圖等)而被調用,並且應該只處理繪圖,沒有別的。 –