Objective c 事件范围
给定 在my.h文件中声明 在.m文件中Objective c 事件范围,objective-c,cocoa,Objective C,Cocoa,给定 在my.h文件中声明 在.m文件中 @interface Canvas:NSView { NSNumber * currentToolType; ... } 再往下 - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { currentToolType=[[NSNumber alloc]initWithInt:1
@interface Canvas:NSView {
NSNumber * currentToolType;
...
}
再往下
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
currentToolType=[[NSNumber alloc]initWithInt:1];
}
return self;
}
//在开关状态中使用currentToolType值的drawPath方法代码的其余部分
-(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
的地方。但是,出于某种原因,它似乎是mouseUp
中的currentToolType
的另一个实例。我没有为var编写(或合成)访问器,因为它只由自己使用。我注意到,initWithFrame
被调用了两次——我假设它是针对父窗口和NSView的?我错过了什么?
谢谢
这是一个使用COCOA和Obj-C的XCode生成的基于文档的应用程序。我对这两个方面都不熟悉。您可能遇到了一个特殊情况:NSNumber可能有缓存实例来表示常用的数字 但有两个观察结果:
- 当您可以简单地使用NSIntegers或老式的枚举类型时,使用NSNumber会浪费大量内存,完全避免了对象开销
- 当您查看NSNumber的实例时,从未实际显示过的代码;没有它,这里就没有足够的信息来回答你的问题
如果在IB中设置了画布视图,可以通过删除创建第二个画布视图的代码来解决此问题。具有更多代表性的人应该重新标记此画布视图,因为它实际上与范围或事件无关。Jim。我同意。这个头衔是因为缺乏经验。我可以更改它,因为我问-你会建议一个更相关的标题吗?谢谢吉姆。我使用了一个简单的int-same处理。你问过它是怎么用的。与NSLog状态完全相同。e、 g.开关(currentToolType intValue){case 0:…..等。
}
-(IBAction)selectToolOne:(id)sender
{
[currentToolType release];
[currentToolType = [[NSNumber alloc]initWithInt:0];
}
-(IBAction)selectToolTwo:(id)sender
{
[currentToolType release];
[currentToolType = [[NSNumber alloc]initWithInt:1];
}