Tôi hiện đang cố gắng học Cocoa và tôi không chắc chắn nếu tôi hiểu chính xác ... Đó là về đại biểu và bộ điều khiển.Đại biểu trong Cocoa là gì và tại sao tôi nên sử dụng chúng?
Lúc đầu: Sự khác nhau giữa hai yếu tố này là gì? Đôi khi tôi thấy mã nơi một lớp được gọi là AppController
, đôi khi - với nhiều hoặc ít nội dung giống nhau - AppDelegate
.
Vì vậy, nếu tôi hiểu chính xác, đại biểu là một đối tượng đơn giản nhận tin nhắn khi một sự kiện nhất định xảy ra. Ví dụ:
@interface WindowController : NSObject <NSWindowDelegate>
@end
@implementation WindowController
- (void)windowDidMiniaturize:(NSNotification *)notification {
NSLog(@"-windowDidMiniaturize");
}
@end
Bây giờ, tôi sử dụng mã này để làm cho nó một đại biểu của window
tôi:
@interface TryingAppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
}
@property (assign) IBOutlet NSWindow *window;
@property (retain) WindowController *winController;
@end
Với việc thực hiện sau đây:
@implementation TryingAppDelegate
@synthesize window;
@synthesize winController;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSLog(@"-applicationDidFinishLaunching:");
self.winController = [[WindowController alloc] init];
[window setDelegate:winController];
[self.winController release];
}
@end
Và bây giờ, mỗi khi tôi giảm thiểu window
, nó sẽ gửi một thông báo -windowDidMiniaturize:
tới WindowController
. Tôi có đúng không?
Nếu vậy, tại sao bạn không chỉ phân lớp NSWindow
thay vì làm phiền với một lớp học bổ sung bạn phải chăm sóc?
Cảm ơn bạn! Bộ điều khiển của tôi cần phù hợp với giao thức nào? Tôi đoán khi tôi sử dụng NSWindowDelegateProtocol tôi không thể làm cho nó một đại biểu của một 'NSTextField', phải không? Và tôi nhận được tin nhắn nào từ những yếu tố đó? Vẫn 'windowDidMiniaturize' và vân vân? –
Tôi đã cập nhật câu trả lời của mình để bao gồm một số thông tin về giao thức (đại biểu) và một ví dụ. – gcbrueckmann