4

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

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

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

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

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

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

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

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

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

ответ

4

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

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

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

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

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

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

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

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

+0

Это прекрасно, и именно то, что я искал. Ты прав; Я полностью предположил, что 'UIViewController' и' NSViewController' являются синонимами. Твердый ответ и хороший совет. Благодаря! –