Ссылка на объект MVC - PullRequest
       8

Ссылка на объект MVC

1 голос
/ 01 июля 2010

Я создал проект с использованием MVC (если быть более точным, это Hello Poly часть 2 из Стэнфорда)
и у меня возникают проблемы со ссылкой на объект.

Итак, у меня есть Model, которая представляет собой класс PolygonShape, Controller - контроллер и View - PolygonView.
Я сделал розетки в контроллере:

IBOutlet PolygonShape *myShape;  
IBOutlet PolygonView *myView;

и в реализации в awakeFromNib я инициализирую myShape

myShape = [[PolygonShape alloc] initWithNumberOfSides:x minimumNumberOfSides:3 maximumNumberOfSides:12];  

и тогда я хочу в View каким-то образом узнать о

myShape.numberOfSides  

Внутренний интерфейс PolygonView у меня

IBOutlet PolygonShape *myShape;  

и

@property (retain) PolygonShape *myShape;  

но на самом деле происходит то, что myShape в PolygonView - это не тот же объект, хотя я думаю, что в Interface Builder настроены правильные соединения

Следуя указаниям MVC, я не могу заставить модель взаимодействовать напрямую с представлением, так как я могу получить доступ к myShape из PolygonView ??

1 Ответ

1 голос
/ 01 июля 2010

Прежде всего, myShape PolygonView не обязательно должен быть IBOutlet, как и myShape PolygonShape.В awakeFromNib (контроллера), как раз под тем, что есть у вас сейчас, добавьте

[myView setMyShape:myShape];

Представление о модели совершенно приемлемо, просто не наоборот.Поэтому в PolygonView вполне допустимо сказать myShape.numberOfSides, потому что в конце концов он имеет указатель на PolygonShape и, следовательно, «знает» о PolygonShapes и всех их методах.Если вы беспокоитесь о том, как myView узнает об изменениях в myShape, вам просто нужно вызвать метод, такой как -[PolygonView setNeedsDisplay:YES], или для чего-то более сложного, написать метод обновления или что-то в этом роде.По сути, идея Model-View-Controller в первую очередь заключается в том, что все взаимодействия должны проходить через контроллер в любом случае, поэтому, когда он обновляет модель, он также просто сообщает соответствующим представлениям обновить.(Между прочим, это становится намного проще благодаря привязкам, но пока это доступно только в MacOS.)

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