当前位置:  开发笔记 > IOS > 正文

基本的Obj-C问题:在对象上调用方法

如何解决《基本的Obj-C问题:在对象上调用方法》经验,为你挑选了1个好方法。

背景:我是一个没有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).



1> Peter Hosey..:

警告:在OvalDrawDocumentation实现文件中导入OvalView的标头.

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

此外,正如马丁皮尔金顿在他对你的问题的评论中所说的那样,你可能应该宣布该财产retain,而不是assign.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有