Прежде всего, модельный класс не должен общаться с классом представления. TextView является частью представления.
альтернативный текст http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/Art/cocoa_mvc.gif
Контроллер обращается к классам просмотра, а классы представления обеспечивают обратную связь с контроллером. Классы моделей обновляются контроллером и обеспечивают обратную связь с ним. Классы моделей никогда не общаются с классом представления, они даже не знают о существовании каких-либо классов представления. Поэтому я думаю, что у вас есть основная проблема дизайна здесь. Вы, вероятно, реализовали MVC как в этой модели:
альтернативный текст http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/Art/traditional_mvc.gif
Однако это не так, как это делается в 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 хочет, чтобы это было. Модель только уведомляет контроллер о том, что происходит, и контроллер соответственно обновляет представление.