15

Tôi đang trở lại phát triển Cocoa trên Mac sau một thời gian dài làm công việc iPhone. Kinh nghiệm trước đây của tôi với ca cao trên máy Mac vừa được các công cụ ít dinky. Tôi đang tìm cách xây dựng một thứ gì đó nghiêm túc.Kiến trúc ứng dụng ca cao trên Mac OS X

Nhìn vào một ứng dụng Cocoa hiện đại như iPhoto (hoặc Mail hoặc Things hoặc ....) nhiều ứng dụng sử dụng phương pháp tiếp cận dựa trên nguồn-cửa sổ đơn. Tôi đang cố gắng để quấn đầu của tôi xung quanh đó là tốt nhất tôi có thể bởi vì nó dường như cung cấp một kinh nghiệm tốt. Tuy nhiên, tôi đang gặp một chút rắc rối. Đây là cách tôi nghĩ rằng nó sẽ giống, nhưng tôi đang tự hỏi như thế nào người khác đang làm việc đó, và những gì thực sự là cách tốt nhất:

  • Starting Point của ứng dụng là một đối tượng appdelegate đó, sau khi tung ra, tạo ra một cửa sổ [Bộ điều khiển?] Từ một ngòi bút, cùng với việc thiết lập dữ liệu của nó (từ, nói CoreData)

  • WindowController tải một cửa sổ về cơ bản chỉ có một NSSplitView trong đó.

  • Phía bên trái của chế độ xem chia nhỏ có NSTableView hoặc NSOutlineView được đặt để có kiểu Danh sách nguồn.

  • Phía bên phải có nội dung chính của ứng dụng, tùy thuộc vào mục nào của chế độ xem bảng được chọn.

tôi sẽ giả định ở đâu đó (ở đâu?) Có NSViewControllers quản lý cho các quan điểm khác nhau sẽ xuất hiện ở phía bên phải (suy nghĩ như thế nào iPhoto có Tất cả các hình ảnh, sự kiện, khuôn mặt, Places, vv và tôi tưởng tượng tất cả chúng có thể xuất hiện ở các ngòi khác nhau ... điều này có đúng không?).

Bộ điều khiển chế độ xem đó có thể bị ràng buộc vào danh sách nguồn ở bên trái .. cách hoạt động (danh sách nguồn được hỗ trợ bởi NSArrayController của NSViewControllers có thể?).

Dù sao, đó là những suy nghĩ của tôi, tôi hoàn toàn không có cơ sở hay ...? Tôi đã xem xét trên web, tìm thấy bài viết này here, và tôi đã nhìn vào một số mã nguồn của Apple nhưng tôi không thể có vẻ quấn quanh đầu của tôi. Mọi hướng dẫn đều được hoan nghênh.

Trả lời

6

Chia nhỏ chế độ xem thành các ngòi riêng biệt là tốt nếu bạn định trao đổi một số lượt xem cho người khác, vì bạn có thể tải chúng một cách lười biếng. Và có, trong một ứng dụng hiện đại, bạn sẽ sử dụng NSViewController hoặc có lẽ là KTViewController từ KTUIKit (xem the posts she co-wrote about NSViewController)

Đừng chỉ chạy vào vòng tay của danh sách nguồn. Giao diện một cửa sổ có thể tốt cho các ứng dụng đơn giản, nhưng nó có thể nhanh chóng trở nên khó sử dụng khi bạn có nhiều thứ đang diễn ra, vì chúng có thể được phục vụ tốt hơn bằng cách chia chúng thành các cửa sổ riêng; Cả iTunes và Xcode đều cung cấp nhiều ví dụ về điều này (đặc biệt là sau này, vì bạn có thể chuyển đổi nó giữa SWI và MWI).

Bạn cần phải suy nghĩ về việc giao diện nhiều cửa sổ hoặc một cửa sổ sẽ tốt hơn cho ứng dụng của bạn hay không. Không có một câu trả lời cho tất cả các ứng dụng; nó phụ thuộc hoàn toàn vào ứng dụng của bạn, và bạn muốn nó làm gì và bạn muốn nó như thế nào - bạn (cộng với phần còn lại của nhóm của bạn, nếu bạn có một) là người duy nhất có thể trả lời câu hỏi này.Bạn có thể muốn làm một số nguyên mẫu giấy để thực hiện các thí nghiệm nhanh theo từng hướng để bạn có thể giữ ít nhất các ví dụ giả mạo của cả hai giao diện người dùng so với nhau.

+0

Tôi chắc chắn đã suy nghĩ rất nhiều, và tôi nghĩ nó hoạt động tốt cho hoàn cảnh của tôi. Tôi nghĩ rằng mỗi góc nhìn khác nhau sẽ đủ khác nhau để đảm bảo nib của riêng mình, nhưng một lần nữa tôi không chắc chắn. Khi làm công việc iPhone, tôi hiếm khi sử dụng InterfaceBuilder, tuy nhiên với Bindings được tích hợp rất tốt với nó, tôi nghĩ đã đến lúc tôi bắt đầu sử dụng nó nhiều hơn. Tôi cũng đã đọc các bài báo của Cathy, nhưng nó lại là một sự lôi kéo khác theo một hướng khác, do đó sự nhầm lẫn của tôi về cách mọi thứ hoạt động. – jbrennan

+0

Câu hỏi thực sự không khác biệt về quan điểm, nhưng những gì bạn đang sử dụng chúng cho — đối tượng mô hình nào bạn sẽ đặt vào chúng. Nếu hai chế độ xem hiển thị các loại nội dung khác nhau, chúng phải là các chế độ xem khác nhau, mỗi chế độ xem có nib riêng. –

+0

Đúng, chúng sẽ là những ngòi ngách khác nhau bởi vì chúng hiển thị nhiều loại khác nhau. Làm thế nào để chuyển mạch ngòi hoạt động? Khi tôi chọn một hàng khác trong Sourcelist của tôi, làm thế nào mà kích hoạt một ngòi mới được nạp vào? (Ngoài ra, có nên tải một ViewController mới, hoặc chỉ cần hoán đổi chế độ xem ở phía bên tay phải không?) – jbrennan

4

Một cách dễ dàng để có được một cảm giác về cách ngòi được chia ra là chỉ cần đi vào thư mục iPhoto và bắt đầu mở cửa ngòi

Nếu bạn muốn khám phá nhiều hơn một chút vào cấu trúc lớp bạn có thể thử duyệt xung quanh bằng cách sử dụng F-Script

+0

Tôi đã xem qua một số ngòi trước của chúng, nhưng nhiều ứng dụng cũ hơn, được viết trước những điều tốt đẹp như NSViewController, vì vậy tôi tự hỏi, khái niệm, cách tốt nhất để xây dựng chúng cho công nghệ ngày nay là gì. – jbrennan

+0

@cobbal Bạn có ý nghĩa gì khi "bắt đầu mở ngòi?" Khi tôi duyệt nội dung của gói ứng dụng và cố gắng mở chúng từ Trình tìm kiếm, nó sẽ dẫn đến lỗi hoặc không hiển thị nhiều. Nó nói "nibs biên dịch không thể mở được", khi tôi sử dụng Trình tạo giao diện cũ (3.2), hoặc cách khác chỉ hiển thị một biểu tượng nib lớn trong Xcode 4. – febeling

+0

@febeling, có thể thông tin này đã lỗi thời, nhưng đối với tôi Xcode (4.2) có thể mở ngòi ngòi cho iPhoto ('09). – cobbal