给出
@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]);
//在开关参数中使用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
更改的唯一位置。但是,出于某种原因,它似乎是currentToolType
中mouseUp
的不同实例。我没有为var编写(或合成)访问器,因为它只用于自身。我注意到initWithFrame
被调用了两次 - 我假设它是用于父窗口和NSView?
我错过了什么?
谢谢!
这是使用COCOA和Obj-C生成的基于XCode文档的应用程序。我两个都是新人。
答案 0 :(得分:2)
你提到initWithFrame:被调用两次。你的initWithFrame:只应该被调用一次(除非你碰巧有两个Canvas视图)。
你是否有可能在你的nib / xib文件中有Canvas视图,并且还在代码中创建另一个(使用alloc / initWithFrame :)?
在这种情况下,您有两个Canvas对象。你可能有一个连接到你的控件,另一个在窗口中(因此响应mouseUp:它每次都给你相同的值)。
如果您在IB中设置了Canvas视图,则可以通过删除创建第二个的代码来解决此问题。
答案 1 :(得分:0)
你可能遇到过一个特例:NSNumber可能有缓存的实例来表示常用的数字。
但有两点意见: