2013-02-16 3 views
1

ОК, вот моя ситуация, и я действительно не уверен, какой подход к дизайну использовать. Итак, я был бы рад, чтобы прочитать некоторые материалы на моем конкретном случае ...Глобальный доступ к экземпляру класса - Оптимальный подход к дизайну?

Сценарий:

  • У меня есть вкладка-приложение
  • Сначала мы создаем экземпляр из NSWindowController (например, MyDocumentManager), который заботится о создании вкладки/манипуляции
  • Каждая вкладка содержит (= присоединен к) экземпляру MyDocument

Теперь я собираюсь реализовать действия меню.

  • Для каждого меню имеется отдельный контроллер меню (фактически подкласс NSObject, объединяющий все соответствующие функции), например. Действия MyFileMenuController
  • меню файла в связаны с действиями в MyFileMenuController объекта, с помощью Interface Builder

Вопрос:

  • Как это возможно, что MyFileMenuController"знает" о MyDocumentManager (создано в моем AppDelegate.m), чтобы мы могли получить доступ к текущим данным документа и выполнить все соответствующие действия? Есть идеи? Какой подход предпочтительнее?

Мои идеи:

  • Попутных объект из класса в класс (не представляясь, что большое)
  • Одиночки (хотя я никогда честно не использовал их, и не знают, независимо от того, может ли это быть моим конкретным случаем)
  • Уведомления & Уведомление о прослушивании
  • (Глядя на нее с противоположной стороны, хотя и не уверен) методы делегата

ответ

0

ОК (не уверен, если это лучший способ сделать это), но это то, что я решил сделать:

[[[NSApplication sharedApplication] delegate] MyDocumentManager] 

Итак, до тех пор, пока объект является частью моего AppDelegate, я могу получить доступ к нему из любого места.

0

Я бы сделал начальный UIViewController, связанный с appDelegate.rootViewController.

В этом новом контроллере представления (просто назовите его «mainViewController») я бы поставил свой tabBar и menuController.

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

- (void)discoverMenuForDocument:(MyDocument*)document { 
    // Set menu configuration for specific document 
    // Make animation to discover menu 
} 

Где документ может быть что-то вроде:

self.selectedViewController (<-- You cand make this in several ways depending on your code...) 

Осознайте, что (MyDocument *) не является объектом, а просто ссылка, поэтому, на мой взгляд, нет никаких проблем с этим.

Удачи вам!

+0

Спасибо за ваши предложения. Хотя я определенно не могу определить связь между вашим ответом и моим вопросом ...: S (кстати, я не говорю о Cocoa Touch - вопрос был о Cocoa/OSX). –

+0

Прошу прощения, я думал об общей схеме в iOS. – RubenVot

Смежные вопросы