2010-10-08 2 views
5

Следующий код:Подкласс NSControl не может прочитать цель?

- (void) setTarget:(id)anObject { 
    NSLog(@"anObject: %@",anObject); 
    [super setTarget:anObject]; 
    NSLog(@"Target: %@",[self target]); 
} 

имеет следующий вывод:

anObject: <DropZoneViewController: 0x15dd5770> 
Target: (null) 

Это в подклассе NSControl. Так что я делаю неправильно?

Что я пытаюсь достичь: у меня есть NScontrol, который принимает перетаскивание объектов. Когда перетаскивание заканчивается, я хотел бы отправить действие элемента управления его цели. Но как мне получить действие элемента управления &, если это не работает?

ответ

13

NSControl не сохраняет свою собственную цель, то есть то, что она должна делать.

Таким образом, есть две причины, это может произойти сбой:

  1. Элемент управления не имеет ячейки
    В этом случае вы действительно должны создать подкласс NSActionCell реализовать свой контроль. Ваш подкласс NSControl не должен делать ничего, кроме настройки ячейки.
    Если вы не хотите делать это правильно, используя NSCell, вам нужно будет добавить переменные экземпляра в ваш подкласс NSControl, чтобы сохранить цель и действие и переопределить геттеры и сеттеры для их использования.

  2. Ваша ячейка не является подклассом NSActionCell. Обычный NSCell также не сохраняет цель.
    Если вы используете пользовательскую ячейку, которая не является подклассом NSActionCell, просто измените ее так, чтобы она наследовала от NSActionCell вместо NSCell. Если вы не можете сделать это (например, потому, что вы подклассифицируете подкласс NSCell, вы не можете изменить) вам придется добавить переменные экземпляра для цели и селектора в свой класс ячеек и переопределить его сеттеры и геттеры.

Смежные вопросы