背景:我是一个.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。这样做可以修复编译警告。但是,保存和加载似乎仍然无效,我也不知道为什么。

根据要求,我在网上发布了完整的源代码以供细读:BrowseDownload (59KB zip)

最佳答案

警告:将OvalView的标头导入OvalDrawDocumentation实现文件。

消息在运行时不起作用:确保已实际连接IB中的插座。

同样,正如马丁·皮尔金顿(Martin Pilkington)在对您的问题的评论中所说,您可能应该使用retain而不是assign声明该属性。

10-07 16:37