gpt4 book ai didi

objective-c - 基本 Obj-C 问题 : Calling methods on an object

转载 作者:行者123 更新时间:2023-12-03 16:52:03 25 4
gpt4 key购买 nike

背景:我是一个 .NET 人员,以前没有 Objective-C/Cocoa 经验,但我正在阅读 Aaron Hillegass 的书“Mac OS X 的 Cocoa 编程”,试图掌握基础知识。 (顺便说一句,到目前为止,这是一本很棒的书!)为了完成其中一个可选的附带挑战,我正在编写一个基于文档的应用程序,让用户可以在任意位置绘制椭圆形。

我有两个类,接口(interface)如下:

@interface OvalDrawDocument : NSDocument
{
IBOutlet OvalView* myOvalView;
}
@end

@interface OvalView : NSView {
NSMutableArray *ovals;
}
@property (readwrite, assign) NSMutableArray *ovals;
@end

OvalDrawDocument的实现中,我尝试使用椭圆自动生成的属性访问器,如下所示:

// 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) .

最佳答案

警告:在 OvalDrawDocumentation 实现文件中导入 OvalView 的 header 。

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

此外,正如 Martin Pilkington 在对您的问题的评论中所说,您可能应该使用 retain 声明该属性,而不是 assign

关于objective-c - 基本 Obj-C 问题 : Calling methods on an object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/867035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com