2008-09-17 25 views
7

Tôi có hai điều khiển trong tệp Bộ dựng giao diện và mỗi điều khiển đó tôi đã tạo một lớp đại biểu riêng biệt cho mã (Control1Delegate và Control2Delegate). Tôi đã tạo hai "Đối tượng" trong trình tạo giao diện, tạo chúng theo kiểu đó và kết nối các điều khiển với chúng như là các đại biểu. Các đại biểu làm việc tốt. Vấn đề của tôi là, tôi cần chia sẻ thông tin từ một đại biểu cho đại biểu khác, và tôi không chắc chắn làm thế nào.Kết nối các lớp đại biểu trong Objective-C

Cách tốt nhất để làm điều này là gì? Kết hợp hai đại biểu vào một lớp học, hoặc bằng cách nào đó truy cập vào một lớp thứ ba mà cả hai có thể đọc được? Vì tôi không thực sự khởi tạo lớp ở bất kỳ đâu trong mã của mình, tôi không chắc chắn làm thế nào để có được một tham chiếu đến thực thể của nó (nếu có một thực tế của nó), hoặc thậm chí truy cập vào lớp "chính" dự án đi kèm với.

Trả lời

8

Bạn có thể thêm các cửa hàng từ đại biểu cho đại biểu khác. Có hai cách để thêm một lối thoát để một đối tượng trong IB (giả sử bạn đang sử dụng Xcode/IB phiên bản 3.0 hoặc mới hơn:

  1. Nếu bạn chưa tạo mã cho các lớp đại biểu của bạn chưa, chọn mong muốn đại biểu, sau đó mở tab "Object Identity" trong thanh tra IB.Thêm một "Class outlet" loại NSObject.Bạn sẽ có thể thiết lập ổ cắm mới này cho đại biểu khác.Tất nhiên bạn sẽ phải tạo mã cho lớp đại biểu của bạn và thêm các tệp nguồn đã tạo vào dự án Xcode của bạn trước khi bạn có thể tải nib.

  2. Nếu bạn đã tạo mã cho lớp đại biểu (hoặc thêm NSObject vào NIB của bạn và đặt lớp của nó thành một exis ting lớp trong dự án Xcode của bạn), thêm một biến Ví dụ với lớp đại biểu:

    IBOutlet id outletToOtherDelegate;

    Chừng nào dự án Xcode của bạn đang mở (như được chỉ ra bởi các bong bóng màu xanh lá cây ở phía dưới bên trái của cửa sổ NIB của bạn), IB sẽ tự động phát hiện ổ cắm mới và cho phép bạn gán nó cho đối tượng đại biểu khác trong NIB của bạn.

Ca cao tự động kết nối các cửa hàng này với thời gian tải NIB. Khi awakeFromNib được gọi trên các thể hiện của các đối tượng đại biểu của bạn, bạn có thể giả định rằng tất cả các đối tượng khác trong NIB đã được khởi tạo và tất cả các cửa hàng đã được kết nối. Tuy nhiên, bạn không nên sử dụng lệnh gọi tới số awakeFromNib.

1

Tôi nghĩ rằng bạn có thể tạo các cửa hàng trên mỗi thiết bị và liên kết chéo chúng để mỗi thiết bị có cùng một dữ liệu mọi lúc. Nếu có một đối tượng mô hình mà họ cần chia sẻ, điều đó khá gọn gàng. Tôi thực sự không biết làm thế nào để làm điều này; Tôi nghĩ rằng tôi đã nhìn thấy nó trong một hướng dẫn iPhone một lần!

1

Tôi không có máy Mac trước mặt mình vì tôi đang làm việc, nhưng có thể ràng buộc một cá thể của một đại biểu cho một thành viên của đại biểu khác không? Điều này sẽ tương tự như ràng buộc một NSArrayController với một thành viên của một lớp điều khiển khác, ví dụ.

Tuy nhiên, tùy thuộc vào những gì các lớp đại biểu đang làm, nếu các nhiệm vụ tương tự tôi có lẽ sẽ chỉ kết hợp chúng vào một lớp. Điều đó sẽ loại bỏ hoàn toàn vấn đề.

Các vấn đề liên quan