Я использую Xcode для разработки приложения GUI. У меня есть класс модели и класс контроллера. У меня есть член данных NSTextView в моем классе контроллера. Как получить доступ к этой переменной из класса модели?Доступ к элементу данных контроллера в классе модели
ответ
Прежде всего, класс модели не должен разговаривать с классом вида. TextView является частью представления.
Переговоры контроллер для просмотра классов и просматривать классы обеспечивают обратную связь с контроллером. Классы моделей обновляются контроллером и обеспечивают обратную связь с ним. Классы моделей никогда не разговаривают с классом вида, они даже не знают о существовании каких-либо классов представления. Поэтому я думаю, что у вас есть основная проблема с дизайном. Вы, вероятно, реализован MVC, как в этой модели:
Однако это не так, как это сделано в Mac OS X, это не так, как Apple, делает это, и это не так, как все какао структура объекта была разработана! Поэтому ответ на ваш вопрос: вы этого не сделаете, потому что не должны.
Помимо того, что у вас есть дефект дизайна, вы получаете доступ к нему, как и доступ ко всем членам данных в Objective-C. Если вы зашли на сайт бесплатно, вы можете получить к нему доступ напрямую:
MyController * c = [[MyController alloc] init];
// c has a member name textView, let's access it
[c->textView ...];
Вы уже должны знать, что это действительно очень плохой стиль программирования. Вы не должны напрямую обращаться к элементам данных другого объекта. Вы даже не должны публиковать их. Если вы объявите их конфиденциальными, приведенный выше код не сработает (компилятор гарантирует, что вы этого не сделаете). Другим способом является использование газопоглотителя и доступ к нему через газопоглотитель:
// This goes into the controller
- (NSTextView) textView
{
return textView;
}
// This is called in the modell
[[c textView] ...];
Однако это также плохой дизайн. Модель может делать все, что захочет, с этим объектом, и ваш контроллер не увидит этого! Почему вы не моделируете, просто скажите контроллеру, что он хочет?
// In the controller
- (void) notifyContentHasChanged:(NSString *)name
{
// update the text view here ...
}
// In the modell
[c notifyContentHasChanged:...];
И у вуаля у вас есть MVC так, как это хочет Apple. Модель только уведомляет контроллер о том, что происходит, и контроллер соответственно обновляет представление.
Re: Рекурсивная проблема #import
, то, что вы ищете, является директивой @class
. В большинстве случаев все ваши интерфейсы классов должны знать о других классах, это их имена, так как все фактические данные, относящиеся к конкретным реалиям, находятся в ваших файлах *.m
. Поэтому директива @class
предоставляет способ определения интерфейса для компилятора «эй, когда вы сталкиваетесь с этим словом, это имя класса, поэтому не волнуйтесь». Когда вы используете @class
в своем объявлении интерфейса, вам не нужно будет импортировать заголовочный файл этого класса.
The Objective-C 2.0 Programming Language: Class Interface (Referring to Other Classes).
- 1. Получение доступа к элементу управления Tab в классе модели модели
- 2. Доступ к модели с контроллера?
- 3. Доступ к динамически типизированному элементу
- 4. Доступ к модели с контроллера в Ember
- 5. Доступ массива данных внутри контроллера от модели
- 6. Доступ к атрибутам модели в классе вспомогательных расширений
- 7. Доступ к элементу данных в списке?
- 8. Доступ к элементу в моем классе связанного списка
- 9. Доступ к хранилищу данных контроллера и модели ember.js
- 10. Доступ к объекту за пределами области видимости в классе контроллера
- 11. Доступ к модели с контроллера - SAPUI5
- 12. Titanium доступ к модели от другого контроллера
- 13. Доступ к переменной экземпляра контроллера внутри модели
- 14. AngularJS - Доступ к модели собственности без контроллера
- 15. Как получить доступ к модели от контроллера?
- 16. Доступ к другому элементу ленты в классе IRibbonEextensibility
- 17. Не удалось получить доступ к элементу управления Winforms в классе
- 18. Zend framework 2 доступ к глобальной конфигурации в классе модели
- 19. Доступ к элементу From ngRepeat
- 20. Доступ к элементу Dataframe
- 21. Доступ к базе данных в непрофессиональном классе
- 22. JQuery: доступ к элементу
- 23. Доступ к статическому элементу
- 24. Наследование контроллера в Ruby on Rails - доступ к модели и контроллеру в родительском классе
- 25. доступ к элементу div
- 26. Доступ к элементу переменной
- 27. Доступ к элементу массива
- 28. Dragula angular Как получить доступ к элементу модели
- 29. Доступ к элементу в массиве
- 30. Доступ к элементу в Selenium