Разработка приложений высокого уровня / Архитектура - PullRequest
4 голосов
/ 23 февраля 2012

За последние пару лет я довольно много занимался разработкой для iOS, поэтому я довольно хорошо знаком с архитектурой iOS и дизайном приложений (все это ViewController, который вы либо нажимаете, вставляете, либо вставляете в панели вкладок).Я недавно начал изучать правильную разработку приложений для Mac и чувствую себя немного потерянным.Я бы хотел просто проверить работоспособность и, возможно, дать несколько советов о том, как правильно создать приложение, подобное этому:

Я хотел бы создать приложение в виде библиотеки с одним окном,это вызовет дополнительные окна во время его работы, но не как полноценные документы.Главное окно будет расположено так же, как OS X. Lion's Mail.app, с разделенным на три вида представлением, содержащим:

  1. A список источников или выбор темы высокого уровня
  2. A представление списка элементов, относящихся к теме, выбранной на первой панели
  3. A подробное представление , в котором отображаются сведения о выбранном объектев средней панели

Как я уже сказал, очень похоже на Mail.app в том, что касается внешнего вида.

Мой вопрос заключается в том, как склеить все это изнутри XCode.Вот где моя путаница лежит пока:

  • Проект по умолчанию генерирует NIB с главным меню и окном.Мне нравится инкапсулировать функциональность, поэтому я должен сделать оконный контроллер для этого окна и каким-то образом подключить его в Интерфейсном Разработчике, или функциональность, относящаяся к окну, принадлежит где-то еще?

  • Если возможно,Я бы хотел, чтобы каждая из трех моих панелей была отдельным контроллером представления.Я создал три подкласса NSViewController (автоматически генерируемые NIB XCode) и добавил (к NIB главного меню / окна) объекты контроллера представления с каждым указанным классом, подключив каждое свойство view к одному из трех Custom View универсальных объектов NSViewЯ упал в NSSplitView.Когда я пытался установить NIB каждого контроллера представления, в раскрывающемся списке отображалось только главное меню / окно NIB, и ввод нужного значения вручную, казалось, не имел никакого эффекта (содержимое представления фактически не отображалось при запуске приложения).,Это заставляет меня думать, что я делаю что-то не так.

  • Я немного размышляю о том, какие типы представлений мне следует использовать для каждой из первых двух панелей.Очевидно, я создам пользовательский для последней панели, но кажется, что первые два уже должны присутствовать в каркасе Cocoa.

В любом случае, если я делаю полностьюнеправильно, не беспокойтесь о моих вопросах;просто скажи мне, что я должен делать вместо этого.Я думаю, что мне просто нужен надлежащий разработчик Mac, чтобы указать мне правильное направление.

1 Ответ

4 голосов
/ 23 февраля 2012

Что касается вашего первого вопроса, вам не нужно использовать главное окно, которое Apple предоставляет в MainMenu.xib.Если вы хотите, вы можете удалить это окно из пера, а затем создать экземпляр NSWindowController в методе делегата applicationDidFinishLaunching:, который затем загружает и контролирует главное окно.

Вы определенно запутались в NSViewController, что на самом деле не так уж удивительно, поскольку вы можете предположить, что оно работает как UIViewController.

Фактически, NSViewController полностью отличается от UIViewController и не имеет такого же уровня поддержки Interface Builder.Например, вы не можете поместить контроллер вида в окно в IB, тогда как это стандартная практика для iOS.NSViewController - это относительно новый класс на Mac, и обычно вы используете его для программной загрузки представлений и управления содержимым представления.

Класс, который наиболее близко соответствует UIViewController на Mac, - NSWindowController.Это было намного дольше, чем NSViewController, и на самом деле многие приложения Mac вообще не используют NSViewController.

Как правило, каждое окно в вашем приложении должно иметь оконный контроллер, управляющий им.Вы можете использовать подклассы NSWindowController для обработки большого количества функциональных возможностей для каждого окна.

Если вы хотите использовать NSViewController, то вам следует использовать ваш оконный контроллер для управления этими объектами контроллера представления.Обычно это делается программно из-за вышеуказанного отсутствия поддержки Interface Builder.Каждый экземпляр NSViewController загружает свой вид из определенного файла пера.Обычно вы не добавляете контроллеры представления в Интерфейсном Разработчике.

Для списка источников вы обычно используете NSOutlineView, если у вас есть несколько разделов, или NSTableView.Эти два объекта используются всякий раз, когда вам нужен список элементов.NSOutlineView является иерархическим, тогда как NSTableView является плоским.

Надеюсь, это поможет.

...