【发布时间】:2008-11-29 03:16:56
【问题描述】:
给定
@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]);
//在 switch 语句中使用 currentToolType 值的 drawPath 方法代码的其余部分
}
-(IBAction)selectToolOne:(id)sender
{
[currentToolType release];
[currentToolType = [[NSNumber alloc]initWithInt:0];
}
-(IBAction)selectToolTwo:(id)sender
{
[currentToolType release];
[currentToolType = [[NSNumber alloc]initWithInt:1];
}
动作方法是唯一更改currentToolType 的地方。但是,出于某种原因,它似乎是mouseUp 中currentToolType 的不同实例。我没有为 var 编写(或合成)访问器,因为它仅由它自己使用。我注意到 initWithFrame 被调用了两次 - 我假设它是针对父窗口和 NSView 的?
我错过了什么?
谢谢!
这是一个使用 COCOA 和 Obj-C 生成的基于 XCode 文档的应用程序。我都是新手。
【问题讨论】:
-
有更多代表的人应该重新命名这个,因为它实际上与范围或事件无关。
-
吉姆。我同意。标题是因为缺乏经验。我可以更改它,因为我问过 - 对于更相关的标题,你会建议什么?
标签: objective-c cocoa