Доступ к контроллеру в приложении Какао - PullRequest
0 голосов
/ 14 марта 2009

Я начинаю думать, что мое приложение Какао на самом деле сделано не в соответствии с принципами MVC. Моя проблема заключается в следующем:

В моем проекте есть несколько классов, один из которых называется Copier.h, а другой - DropReciever.h. Copier является своего рода контроллером основного вида, так как он имеет все привязки и основные методы. DropReciever - это пользовательская реализация NSView, позволяющая приложению принимать файлы с помощью перетаскивания.

Теперь, есть ли простой способ отправлять сообщения на Copier с DropReceiver? Прямо сейчас, эти двое не знают друг друга, и я не могу придумать изящного способа соединить их, так как они оба как бы созданы отдельно Как я могу заставить их видеть друг друга? Или есть какой-нибудь элегантный способ сделать это лучше?

(Если вы хотите посмотреть на мой исходный код, он здесь .)

Ответы [ 3 ]

2 голосов
/ 15 марта 2009

Другим способом было бы выставить свойство приемника отбрасывания в качестве привязки и привязать к нему копир (программно). Затем, в методе drop, пусть приемник отбрасывания устанавливает отброшенное содержимое в качестве значения этого свойства (которое вы бы назвали чем-то вроде droppedObject).

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

2 голосов
/ 15 марта 2009

Я хотел бы иметь свойство делегата на DropReceiver. То, что отвечает за связывание этих вещей, установит делегат. Объект делегата может быть идентификатором, или вы можете создать для него протокол (оба выражения распространены в Какао). Я делаю это повсюду. Вы получаете необходимое разделение без необходимости слишком много работать по домам.

Единственным недостатком, если вы не устанавливаете делегата на инициализацию, является то, что все ваши вызовы к нему должны быть защищены if( delegate ) проверками.

1 голос
/ 15 марта 2009

Обычно я делаю это для создания DropReceiver в перо, а затем добавьте IBOutlet DropReceiver * в ваш Copier.h, а затем перетащите соединение из экземпляра копира в DropReceiver в окне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...