Я пробовал очень большое количество вариантов объявления пары длинных переменных для подкласса 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 long в глобальной области видимости и в структуре интерфейса в заголовочном файле, я попытался использовать свойства, удалилсеттер и геттер и попытались @synthesize ... и я проверил установленные вызовы, они получают различные длинные идентификаторы ... но что бы я ни делал, метод buttonAction возвращает нули от [snbi buttonid];независимо от того, какая кнопка нажата (может быть несколько сотен, и число варьируется. Я должен знать, какая кнопка была нажата, и я не могу написать отдельную целевую подпрограмму для них, потому что я не знаю, сколько их будетв любое время.)
Кажется, что необходимость добавления переменных экземпляра к подклассу настолько очевидна, а механизм доступа к ним настолько прост, что никто никогда не говорит об этом.Я не могу найти ничего об этом, что приводит к рабочему коду.Документы Какао упоминают об этом, но не демонстрируют это, или, по крайней мере, то, что я мог бы найти.
Любое понимание, кто-нибудь?