2013-03-19 31 views
6

Tôi có một kịch bản mà Obj A gửi một tin nhắn đại biểu đến Obj B nói trên cách nhấn một nút. Obj B thực hiện một số hành động dựa trên cuộc gọi đại biểu.Có cần thiết một tin nhắn đại biểu phải luôn luôn có hiệu lực như một kiểu trả về không?

Obj A muốn hiển thị nội dung nào đó trên màn hình dựa trên kết quả của những gì đã xảy ra sau khi tin nhắn đại biểu đó được gọi.

Giả sử Obj B duy trì bộ đếm, số lần hành động đó diễn ra.

Vì vậy, khi Obj A nhấn các nút và gọi phương thức đại biểu, đó là một ý tưởng tốt cho phương thức đại biểu đó để trả về một giá trị, trong trường hợp của tôi là bộ đếm hiện tại?

để Obj A có thể hiển thị giá trị cập nhật bộ đếm.

Trong trường hợp này, thông báo tương tự đang hoạt động với tư cách là Đại biểu và Nguồn dữ liệu.

Đối với tôi Obj A là Chế độ xem và Obj B là Trình điều khiển chế độ xem.

Việc triển khai của tôi có bị thiếu sót không?

+1

Đại biểu tuyệt đối không có gì đặc biệt. Nó chỉ là một lớp/instance/method có chứa một số hàm bạn muốn truy cập. Bạn có thể, ví dụ, xem hệ thống tập tin của hộp như một tập hợp các đại biểu - bạn gọi cho họ và họ thực hiện một dịch vụ. –

Trả lời

5

Tôi thích triển khai của bạn.

Thậm chí nếu nó không phân biệt giữa vai trò đại biểu và nguồn dữ liệu, nó kết hợp chúng theo một cách đơn giản hơn.

Tôi đoán là cách thích hợp để thực hiện như xa như khái niệm MVC là:

  • A (quan điểm) gửi B (các đại biểu) một thông báo nói: "Tôi bị nghe lén" hoặc một cái gì đó tương tự.

  • B (đại biểu) hoạt động khi cần và gửi lại cho A thông báo có nội dung "reloadData".

  • B yêu cầu B (làm nguồn dữ liệu ngay bây giờ) để dữ liệu hiển thị.

bởi vì trong trường hợp của bạn các đại biểu và các nguồn dữ liệu là cùng một đối tượng, vì nó xảy ra trong nhiều trường hợp khác, có vẻ như với tôi rất đáng tin cậy và không phải ở tất cả các thiếu sót để thực hiện các dòng chảy như bạn đã làm:

  • A (chế độ xem) gửi B (đại biểu & nguồn dữ liệu) một thông báo và nhận lại thông tin dữ liệu cần thiết để làm mới chế độ xem.
3

không và trong nhiều trường hợp, nó không trả về giá trị.

này là một cách tiếp cận hợp lệ và thường được sử dụng .. một ví dụ là UITextView của đại biểu:

nhưng các thành phần khác NHIỀU làm điều này vì vậy họ không phải là quá đặc biệt nhưng để họ có thể vẫn là chung

2

Không, đó không phải là quy tắc, rằng bản ghi phải trả về khoảng trống.

Có rất nhiều delegates trả về giá trị không trống.

- (BOOL)application:(NSApplication *)sender 
    openFile:(NSString *)filename;      // NSApplication 
- (BOOL)application:(UIApplication *)application 
    handleOpenURL:(NSURL *)url;       // UIApplicationDelegate 
- (UITableRowIndexSet *)tableView:(NSTableView *)tableView 
    willSelectRows:(UITableRowIndexSet *)selection;  // UITableViewDelegate 
- (NSRect)windowWillUseStandardFrame:(NSWindow *)window 
    defaultFrame:(NSRect)newFrame;      // NSWindow 
Các vấn đề liên quan