2009-06-03 5 views
5

Tôi có một ứng dụng Dữ liệu cốt lõi không dựa trên tài liệu. Có một số NSTreeController quản lý tập hợp các đối tượng được hiển thị trong một danh sách nguồn NSOutlineView. Chúng là các loại thông thường: tiêu đề, thư mục, thư mục thông minh, v.v.NS (Array | Tree) Bộ điều khiển Kiến trúc cho nhiều NSViewControllers

Mỗi đối tượng vùng chứa này có bộ sưu tập gồm contents đối tượng. Tôi có ba bộ điều khiển xem riêng biệt hiển thị các đối tượng này theo nhiều cách khác nhau (NSTableView và hai chế độ xem đồ họa tùy chỉnh, nếu bạn thực sự muốn biết) Nhưng đây thực sự chỉ là ba bản trình bày khác nhau của cùng một dữ liệu. Chúng phải luôn hiển thị cùng một đối tượng, chia sẻ cùng một lựa chọn, v.v.

Tôi cũng đang sử dụng một hệ thống phân cấp là NSViewController để quản lý chế độ xem của mình. (Nếu tôi biết về tuyệt vời của Cathy Shive KTUIKit vào thời điểm đó, tôi đã sử dụng điều đó, nhưng bộ điều khiển xem của tôi rất giống với - và rất nhiều cảm hứng của - cô ấy)

Hiện tại, tôi có một số NSTreeController trong trình điều khiển chế độ xem cho chế độ xem danh sách nguồn. Tôi cũng có một NSArrayController trong mỗi bộ điều khiển chế độ xem phụ được gắn với NSTreeController qua một số đường dẫn khóa quá phức tạp.

Vì vậy, những gì cần phải thay đổi, theo ý kiến ​​của tôi, là như sau:

  • Các NSTreeController nhu cầu di chuyển ra khỏi điều khiển quan điểm phác thảo của.
  • Có phải là một đơn NSArrayController rằng mỗi chế độ xem nội dung có thể bị ràng buộc thay vì ba chế độ xem riêng biệt. Mặc dù tôi ít chắc chắn về điểm này.

Điều tôi đang gặp khó khăn là tìm ra trong đó những nội dung này sẽ hiển thị. Tôi đang gặp khó khăn trong việc quyết định đối tượng nào, nếu có, thực sự "sở hữu" các bộ điều khiển khác nhau. Bộ điều khiển chế độ xem gốc có sở hữu không? Bộ điều khiển cửa sổ? Vì đây là dữ liệu cấp ứng dụng, tôi có đi xa như vậy để làm cho các ứng dụng này thuộc quyền của App Delegate không? (Tôi có thể tưởng tượng một trường hợp mà một sử dụng có thể muốn mở nhiều cửa sổ, mặc dù đó không phải là hiện đang được hỗ trợ) StackOverflow hive tâm nghĩ gì?

Trả lời

2

NSArrayController và NSTreeController được coi là đối tượng xem hơn bộ điều khiển thực, vì vậy có vẻ như bạn đang đi đúng hướng. Tôi đã bắt đầu về cách bạn đã làm, cho mỗi NSViewController NSArrayController riêng của nó hoặc NSTreeController khi cần thiết, và cấu hình các ràng buộc giữa chúng khi chạy qua bộ điều khiển cửa sổ chịu trách nhiệm đưa tất cả các phần lại với nhau.

Nếu bạn nghĩ nó sẽ đơn giản hóa mọi thứ, có vẻ như không có gì sai khi di chuyển các đối tượng NSArrayController và NSTreeController đến bộ điều khiển cửa sổ. Bạn vẫn có thể thiết lập các ràng buộc với representObject của trình điều khiển của khung nhìn trong IB, và sau đó tạo các bộ điều khiển mảng/cây trong mã trong bộ điều khiển cửa sổ của bạn vào thời điểm thích hợp. Chỉ cần cẩn thận để không quá phức tạp ở đây. Tôi đã thấy rằng khi bạn có nhiều bộ điều khiển xem trong cùng một cửa sổ bằng cách sử dụng representObject cho những thứ khác nhau, việc tạo các thuộc tính riêng biệt, được nhập dễ dàng hơn để bạn có thể hiểu được những phần nào đi đến đâu.

Tôi thực sự không hiểu lợi ích của việc tạo bộ phận kiểm soát mảng/cây của ứng dụng, nhưng tôi không biết nhiều về những gì bạn đang làm ở đó. Có lẽ bạn sẽ được hưởng lợi từ việc làm cho đối tượng "điều khiển dữ liệu" của riêng bạn?

Các câu hỏi như thế này có thể khó quyết định vì đôi khi không có câu trả lời "đúng", nhưng miễn là bạn giữ sự đơn giản và dễ hiểu, bạn sẽ không sao. Đừng ngại chọn một kế hoạch và tiếp tục, bạn luôn có thể cấu trúc lại sau này ... Tôi biết đã có những lúc tôi dành nhiều ngày cho những câu hỏi về kiến ​​trúc như thế này, khi tôi có thể làm việc gì đó thực tế hơn!

+0

Cảm ơn phản hồi chu đáo của bạn! Tôi đã luôn luôn coi bộ điều khiển đối tượng cũng được xem nhiều hơn. Đó là một phần của lý do cho sự do dự của tôi ở đây :-) Tôi đã không nghĩ về việc sử dụng representObject cho các bộ điều khiển; Tôi đã từ bỏ bản thân mình để thực hiện các ràng buộc theo lập trình. Động lực cho câu hỏi này là tôi đã đạt đến một điểm mà tôi phải tái cấu trúc lại. Nó quá đau đớn để quản lý tất cả sự phức tạp của việc có bộ điều khiển ở những nơi kỳ lạ. Tôi cũng đã loại trừ ứng dụng đại biểu là địa điểm thích hợp. Cửa sổ cảm thấy giống như nơi hợp lý nhất cho nó. – Alex