указать свой делегат в классе, иметь проверку типов в Интерфейсном Разработчике - PullRequest
2 голосов
/ 10 января 2012

Я написал класс Objective-C, который должен уведомить другой класс, поэтому я определил протокол для делегата:

@protocol glob_protocol <NSObject>
  @required
  - (IBAction) call:(int) val val2:(int) val2;
@end

В моем классе у меня есть член для хранения делегата:

  IBOutlet id <glob_protocol> delegate;

При подключении классов / экземпляров в Интерфейсном Разработчике теперь нет проверки типов. Я могу подключить любой класс в качестве делегата.

Есть ли способ включить проверку типов? Я хотел бы, чтобы только классы / экземпляры, которые реализуют протокол, могли быть установлены как делегаты.

Спасибо за любые подсказки, Торстен.

EDIT: Я только что проверил в заголовочных файлах UIKit, чтобы увидеть, есть ли какие-либо дополнительные сведения или ключевые слова, но я не нашел ни одного. Интересно, откуда InterfaceBuilder получил информацию о том, какие экземпляры могут быть установлены в качестве делегата.

1 Ответ

2 голосов
/ 10 января 2012

обычно это работает:

- (void)setDelegate:(id<glob_protocol>)inDelegate
{
  if (inDelegate) {
    assert([inDelegate conformsToProtocol:@protocol(glob_protocol)]);
  }
  ...
}

, хотя это не на том уровне / фазе, как вы хотите, оно работает хорошо, потому что соединения меняются не часто.

...