Дано
@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]);
// остальная часть кода метода drawPath, который использует значение currentToolType в статусе переключателя
}
-(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?
Что мне не хватает?
СПАСИБО!
Это приложение на основе документов, созданное XCode с использованием COCOA и Obj-C. Я новичок в обоих.
Джим. Я согласен. название из-за отсутствия опыта. Я могу изменить его, так как спросил - что бы вы посоветовали для более подходящего названия?





Вы, вероятно, столкнулись с особым случаем: NSNumber мог иметь кешированные экземпляры для представления часто используемых чисел.
Однако два наблюдения:
Спасибо, Джим. Я использовал простую int - такую же сделку. Вы спросили, как это используется. Точно так же, как и в статистике NSLog. например переключатель (currentToolType intValue] {case 0: .... и т. д.
Вы упомянули, что initWithFrame: вызывается дважды. Ваш initWithFrame: следует вызывать только один раз (если только у вас нет двух представлений Canvas).
Возможно ли, что у вас есть представление Canvas в вашем файле nib / xib, а также вы создаете еще один в коде (с alloc / initWithFrame :)?
В этом случае у вас есть два объекта Canvas. Вероятно, один из них подключен к вашим элементам управления, а другой находится в окне (и, таким образом, отвечает на mouseUp: и каждый раз дает вам одно и то же значение).
Если у вас есть настройка представления холста в IB, вы можете решить эту проблему, удалив код, создающий второй.
Кто-то, у кого больше репутации, должен переименовать это, поскольку на самом деле это не имеет ничего общего с областью действия или событиями.