2010-07-01 67 views
1

我使用MVC(更具體地說,這是來自斯坦福大學的Hello Poly part 2)設置項目
我引用對象時遇到了問題。MVC對象引用

所以我有模型,它是PolygonShape類,控制器 - 控制器和視圖 - PolygonView。
我在控制器製造網點:

IBOutlet PolygonShape *myShape; 
IBOutlet PolygonView *myView; 

,並在awakeFromNib執行我初始化MyShape的

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

,然後我想在查看莫名其妙地瞭解

myShape.numberOfSides 

內PolygonView的接口我有

IBOutlet PolygonShape *myShape; 

@property (retain) PolygonShape *myShape; 

但會發生什麼實際上是在MyShape的是PolygonView不一樣的物體,即使我想我已經在Interface Builder

建立正確的連接繼MVC方向我不能讓模型直接與視圖交流,那麼如何從PolygonView訪問myShape?

回答

1

首先,PolygonView的myShape不一定是IBOutlet,PolygonShape的myShape也不應該。在awakeFromNib(的控制器),只需根據你現在所擁有的,加上

[myView setMyShape:myShape]; 

這是完全可以接受的一個觀點了解的機型,只是沒有相反。所以在PolygonView中,完全可以接受myShape.numberOfSides,因爲畢竟它有一個指向PolygonShape的指針,因此'知道'PolygonShapes及其所有方法。如果您擔心myView如何知道有關對myShape所做的更改,則只需調用諸如-[PolygonView setNeedsDisplay:YES]之類的方法,或者對於涉及的內容稍微多一些,請編寫刷新方法或其他內容。基本上,模型 - 視圖 - 控制器的概念首先是所有的交互應該通過控制器,所以無論何時它更新模型,它也只是告訴相關視圖刷新。 (其中一些綁定方式變得更容易,順便說一句,但這只是在MacOS上暫時可用)。

+0

謝謝,這對我有用:)只有它彈出警告「No -setMyShape:method found」。你能告訴我這個方法來自哪裏嗎? – Patryk 2010-07-01 21:26:07

+0

你說你宣佈PolygonShape * myShape作爲@property(默認爲readwrite),所以默認的setter名稱是setMyShape:...你說它不能工作?你確定你#正確地輸入了一切嗎? – 2010-07-01 23:34:26

+0

是的,但我做了PolygonView,這似乎也需要這個@property(保留)PolygonShape * myShape;到位。現在,我把它放在我的控制器中,它沒有任何警告生成:) 非常感謝你的傢伙:) – Patryk 2010-07-01 23:47:36