gpt4 book ai didi

objective-c - 事件范围

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

给定

@interface Canvas:NSView {        
NSNumber * currentToolType;
...
}

在我的 .h 文件中声明并在 .m 文件中

- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
currentToolType=[[NSNumber alloc]initWithInt:1];
}
return self;
}

再往下

-(void)mouseUp:(NSEvent *)event
{
NSLog(@"tool value in event: %d",[currentToolType intValue]);
//rest of code
}

-(NSBezzierPath *)drawPath:(NSRect)aRect
{
NSLog(@"tool value in draw: %d",[currentToolType intValue]);

//drawPath 方法代码的其余部分,在 switch 语句中使用 currentToolType 的值

}

-(IBAction)selectToolOne:(id)sender
{
[currentToolType release];
[currentToolType = [[NSNumber alloc]initWithInt:0];
}

-(IBAction)selectToolTwo:(id)sender
{
[currentToolType release];
[currentToolType = [[NSNumber alloc]initWithInt:1];
}

操作方法是 currentToolType 发生更改的唯一位置。但是,由于某种原因,它似乎是 mouseUpcurrentToolType 的不同实例。我没有为 var 编写(或合成)访问器,因为它仅由其自身使用。我注意到 initWithFrame 被调用了两次 - 我假设它是针对父窗口和 NSView 的?

我缺少什么?
谢谢!
这是一个使用 COCOA 和 Obj-C 生成的基于 XCode 文档的应用程序。我对这两个领域都是新手。

最佳答案

您提到 initWithFrame: 被调用了两次。你的 initWithFrame: 应该只被调用一次(除非你碰巧有两个 Canvas View )。

您的 nib/xib 文件中是否有 Canvas View ,并且还在代码中创建另一个 View (使用 alloc/initWithFrame:)?

在这种情况下,您有两个 Canvas 对象。你可能有一个连接到你的控件,另一个在窗口中(因此响应 mouseUp:并且它每次都给你相同的值)。

如果您在 IB 中设置了 Canvas View ,则可以通过删除创建第二个 View 的代码来解决此问题。

关于objective-c - 事件范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/327105/

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