Objective c MVC对象引用

Objective c MVC对象引用,objective-c,model-view-controller,Objective C,Model View Controller,我使用MVC建立了一个项目(更具体地说,这是斯坦福大学的Hello Poly第2部分) 我在引用对象时遇到问题 所以我有一个模型,它是PolygonShape类、Controller-Controller和View-PolygonView。 我在控制器中制作了插座: IBOutlet PolygonShape *myShape; IBOutlet PolygonView *myView; 在awakeFromNib的实现中,我初始化了myShape myShape = [[PolygonS

我使用MVC建立了一个项目(更具体地说,这是斯坦福大学的Hello Poly第2部分)
我在引用对象时遇到问题

所以我有一个模型,它是PolygonShape类、Controller-Controller和View-PolygonView。
我在控制器中制作了插座:

IBOutlet PolygonShape *myShape;  
IBOutlet PolygonView *myView;
在awakeFromNib的实现中,我初始化了myShape

myShape = [[PolygonShape alloc] initWithNumberOfSides:x minimumNumberOfSides:3 maximumNumberOfSides:12];  
然后我想从某种角度了解

myShape.numberOfSides  
我有PolygonView的内部接口

IBOutlet PolygonShape *myShape;  

但实际上,PolygonView中的myShape不是同一个对象,尽管我认为我在Interface Builder中设置了正确的连接


按照MVC的指示,我无法使模型与视图直接通信,因此如何从PolygonView访问myShape???

首先,PolygonView的myShape不一定是IBOutlet,PolygonShape的myShape也不应该是。在awakeFromNib(控制器的)中,就在您现在拥有的下,添加

[myView setMyShape:myShape];

视图了解模型是完全可以接受的,而不是相反。因此,在PolygonView中,说myShape.numberOfSides是完全可以接受的,因为毕竟它有一个指向PolygonShape的指针,因此“知道”PolygonShape及其所有方法。如果您担心myView将如何了解myShape的更改,您只需要调用一个方法,如
-[PolygonView setNeedsDisplay:YES]
,或者编写一个刷新方法或类似的方法。基本上,模型-视图-控制器的想法首先是所有交互都应该通过控制器进行,因此每当它更新模型时,它也只是告诉相关视图刷新。(顺便说一句,通过绑定,其中一些功能会变得更容易,但目前仅在MacOS上可用。)

首先,PolygonView的myShape不一定是IBOutlet,PolygonShape的myShape也不应该是。在awakeFromNib(控制器的)中,就在您现在拥有的下,添加

[myView setMyShape:myShape];

视图了解模型是完全可以接受的,而不是相反。因此,在PolygonView中,说myShape.numberOfSides是完全可以接受的,因为毕竟它有一个指向PolygonShape的指针,因此“知道”PolygonShape及其所有方法。如果您担心myView将如何了解myShape的更改,您只需要调用一个方法,如
-[PolygonView setNeedsDisplay:YES]
,或者编写一个刷新方法或类似的方法。基本上,模型-视图-控制器的想法首先是所有交互都应该通过控制器进行,因此每当它更新模型时,它也只是告诉相关视图刷新。(顺便说一句,通过绑定,其中一些功能会变得更容易,但这目前仅在MacOS上可用。)

谢谢,这对我来说很有效:)只不过它会弹出一个警告“No-setMyShape:method found”。你能告诉我这个方法是从哪里来的吗?你说你将PolygonShape*myShape声明为@property(默认为readwrite),所以默认的setter名称是setMyShape:。。。你说它不管用?你确定导入的所有内容都正确吗?是的,但我在PolygonView中这样做了,它似乎也需要这个@property(retain)PolygonShape*myShape;在正确的位置现在,我把它放在我的控制器中,它在没有任何警告的情况下构建:)非常感谢,伙计:)谢谢,这对我来说很有效:)只有它弹出一个警告“No-setMyShape:methodfound”。你能告诉我这个方法是从哪里来的吗?你说你将PolygonShape*myShape声明为@property(默认为readwrite),所以默认的setter名称是setMyShape:。。。你说它不管用?你确定导入的所有内容都正确吗?是的,但我在PolygonView中这样做了,它似乎也需要这个@property(retain)PolygonShape*myShape;在正确的位置现在我把它放在我的控制器中,它在没有任何警告的情况下构建:)非常感谢,伙计:)