背景:我是一个.NET的人,没有在Objective-C / Cocoa方面的经验,但是我正在研究Aaron Hillegass的书“ Mac OS X的Cocoa编程”,以尝试了解基础知识。 (到目前为止,棒极了,顺便说一句!)为了完成可选的附加挑战之一,我正在编写一个基于文档的应用程序,该程序可让用户在任意位置绘制椭圆形。
我有两个类,接口如下:
@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。这样做可以修复编译警告。但是,保存和加载似乎仍然无效,我也不知道为什么。
根据要求,我在网上发布了完整的源代码以供细读:Browse或Download (59KB zip)。
最佳答案
警告:将OvalView的标头导入OvalDrawDocumentation实现文件。
消息在运行时不起作用:确保已实际连接IB中的插座。
同样,正如马丁·皮尔金顿(Martin Pilkington)在对您的问题的评论中所说,您可能应该使用retain
而不是assign
声明该属性。