저는 현재 Cocoa를 배우려고 노력하고 있습니다. 정확하게 이해한다면 잘 모르겠습니다 ... 및 컨트롤러에 대해 대표가 있습니다.Cocoa의 델리게이트는 무엇이며 왜 사용해야합니까?
처음에는 두 가지의 차이점은 무엇입니까? 때로는 클래스가 AppController
이라고 불리는 코드를 볼 수 있습니다. 가끔은 - 같은 내용으로 - AppDelegate
이 있습니다.
그래서 제대로 이해하면 대리자는 특정 이벤트가 발생할 때 메시지를받는 간단한 개체입니다. 예를 들어 내가 최소화 할 때마다, 지금
@implementation TryingAppDelegate
@synthesize window;
@synthesize winController;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSLog(@"-applicationDidFinishLaunching:");
self.winController = [[WindowController alloc] init];
[window setDelegate:winController];
[self.winController release];
}
@end
그리고 다음 구현
@interface TryingAppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
}
@property (assign) IBOutlet NSWindow *window;
@property (retain) WindowController *winController;
@end
: 이제
@interface WindowController : NSObject <NSWindowDelegate>
@end
@implementation WindowController
- (void)windowDidMiniaturize:(NSNotification *)notification {
NSLog(@"-windowDidMiniaturize");
}
@end
, 나는 그것을 내 window
의 대리자를 만들기 위해이 코드를 사용 window
이면 -windowDidMiniaturize:
메시지가 WindowController
에게 전송됩니다. 나는 그 권리가 있니?
그렇다면 보조 클래스를 추가로 다루는 것보다 NSWindow
을 서브 클래스로 만들면 어떻습니까?
고마워요! 내 컨트롤러는 어떤 프로토콜을 준수해야합니까? NSWindowDelegateProtocol을 사용할 때 NSTextField의 델리게이트로 만들 수 없을 것입니다. 그렇습니까? 그리고 그 요소들로부터 어떤 메시지를 받습니까? 아직도'windowDidMiniaturize' 등등? –
(대리인) 프로토콜 및 예제에 대한 정보를 포함하도록 답변을 업데이트했습니다. – gcbrueckmann