我尝试了很多变体,为NSButton的子类声明了几个长变量;基本上,当创建对象时,我想在那里粘贴几个值,这样我的编程按钮就可以工作......
pool = [[NSAutoreleasePool alloc] init];
...
scbi = [[[MyNSButtonSubClass alloc] initWithFrame: buttonInitRect]
autorelease];
[scbi setButtonid: myLongButtonId];
[scbi setTarget: self];
[scbi setAction: @selector(buttonAction:];
...
[pool release];
将适用于此:
- (IBAction)buttonAction:(id)sender
{
MyNSButtonSubclass *snbi;
long buttonid;
snbi = (MyNSButtonSubclass *)sender
buttonid = [snbi buttonid];
}
在子类中,我有:
- (void)setButtonid:(long)x
{
buttonid = x;
}
...我已尝试在全局范围和头文件的界面结构中声明buttonid,我尝试使用属性,删除了setter和getter并尝试了@synthesize ...而且我'检查了设置调用,他们正在接收各种长ID ...但无论我做什么,buttonAction方法从[snbi buttonid]返回零;无论按下哪个按钮(可能有数百个按钮,数量也不一样。我必须知道按下了哪个按钮,我不能为它们编写单独的目标例程,因为我不知道会有多少个按钮在任何时候。)
似乎需要向子类添加实例变量是如此明显,并且访问它们的机制如此基本,没有人会谈论它。我无法找到导致工作代码的任何内容。 Cocoa文档提到了它,但没有证明它,或者至少我能找到它。
任何洞察力,任何人?