我使用MVC创建了一个项目(更具体地说,这是来自斯坦福大学的Hello Poly part 2)
我在引用对象时遇到了问题。
所以我有模型,它是视图类,控制器-控制器,和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; 但是实际上PolygonView中的myShape不是同一个对象,尽管我认为我已经在Interface Builder中设置了适当的连接
按照MVC的指导,我不能使模型直接与视图通信,那么我如何从PolygonView访问myShape ??
发布于 2010-07-02 02:43:46
首先,PolygonView的myShape不一定是IBOutlet,PolygonShape的myShape也不一定是。在(控制器的) awakeFromNib中,就在您现在拥有的下面,添加
[myView setMyShape:myShape];视图知道模型是完全可以接受的,但不是反过来。因此,在PolygonView中,说myShape.numberOfSides是完全可以接受的,因为毕竟它有一个指向PolygonShape的指针,因此“知道”PolygonShapes及其所有方法。如果你担心myView将如何知道myShape的变化,你只需要调用一个像-[PolygonView setNeedsDisplay:YES]这样的方法,或者如果需要更多的东西,可以写一个刷新方法或类似的东西。基本上,首先模型-视图-控制器的思想是所有的交互都应该通过控制器,所以每当它更新模型时,它也只是告诉相关的视图进行刷新。(顺便说一句,有了绑定,其中一些操作会变得容易得多,但目前只在MacOS上可用。)
https://stackoverflow.com/questions/3159452
复制相似问题