Событие мыши: какой экземпляр какой?(Objective-C) - PullRequest
0 голосов
/ 08 декабря 2011

Я изучаю цель-C, и мне нужно обработать событие нажатия мыши.

Мой заголовок выглядит примерно так:

@interface TestAppDelegate : NSWindow <NSWindowDelegate> {
  NSWindow *window;
  IBOutlet NSTextField* text_box;
}

в то время как файл реализации:

-(void)mouseDown:(NSEvent *)event {
  [text_box setFloatValue:1.0];
  NSLog(@"It worked!");
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
  [text_box setFloatValue:-1.0];
}

и интерфейс имеет только текстовое поле, подключенное к моему text_box. В xib-файле я установил имя класса TestAppDelegate.

Теперь, похоже, работает событие нажатия мыши, и я вижу "Это сработало!" журнал. Однако текстовое поле не обновляется и остается -1.

Чтобы понять, что происходит, я добавил кнопку, которая связана с

-(IBAction)scrollerChanged:(id)sender {
  [text_box setFloatValue:2.0];
}

, и это корректно обновляет мой text_form до 2. Следовательно, мои интерпретации состоят в том, что событие мыши вызывает другой экземпляр TestAppDelegate. Я прав? Я делаю что-то в корне не так?

Спасибо!

1 Ответ

0 голосов
/ 08 декабря 2011

Похоже, у вас есть несколько экземпляров TestAppDelegate. (Немного необычно иметь объект NSWindow, а также собственный делегат и делегат приложения).

Просто догадываясь, у вас может быть NSWindow в вашей xib, в котором вы установили класс TestAppDelegate, и еще один общий NSObject объект в xib, который также установлен в TestAppDelegate классе.

Возможно, вы связали text_box только с одним из ваших экземпляров (вероятно, с делегатом приложения NSObject один), в то время как ваш экземпляр NSWindow является тем, который фактически получает событие mouseDown:.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...