背景:我是一个没有Objective-C/Cocoa经验的.NET人,但我正在研究Aaron Hillegass的书"Mac OS X的可可编程",试图掌握基础知识.(迄今为止的好书,BTW!)为了完成一个可选的侧面挑战,我正在编写一个基于文档的应用程序,让用户可以在任意位置绘制椭圆.
我有两个类,接口如下:
@interface OvalDrawDocument : NSDocument { IBOutlet OvalView* myOvalView; } @end @interface OvalView : NSView { NSMutableArray *ovals; } @property (readwrite, assign) NSMutableArray *ovals; @end
在实现中OvalDrawDocument
我试图使用自动生成的属性访问器,ovals
如下所示:
// in OvalView.m @synthesize ovals; // in OvalDrawDocument.m [myOvalView setOvals:loadedOvals]; // setter? NSMutableArray *ovalsToSave = [myOvalView ovals]; // getter?
但是,编译器警告我找不到方法,并且它们在运行时也不起作用.它们出现在Code Sense中,但我想这并不意味着什么(仍然习惯了XCode/VS之间的区别)我猜这里有一些Obj-C概念我不太擅长这里,可能与事实myOvalView
也是一个IBOutlet
,但我很丢失.我应该做什么,更重要的是,为什么?
更新:我没有在OvalDrawDocument.m中声明OvalView.h.这样做修复了编译警告.但是,保存和加载似乎仍然不起作用,我无法弄清楚原因.
根据要求,我在网上发布了完整的源代码供浏览:浏览或下载(59KB zip).
警告:在OvalDrawDocumentation实现文件中导入OvalView的标头.
消息在运行时不起作用:确保您已实际连接IB中的插座.
此外,正如马丁皮尔金顿在他对你的问题的评论中所说的那样,你可能应该宣布该财产retain
,而不是assign
.