【问题标题】:specify own delegate in class, have type checking in Interface Builder在类中指定自己的委托,在 Interface Builder 中进行类型检查
【发布时间】:2012-01-11 02:59:57
【问题描述】:

我写了一个objective-C类,需要通知另一个类,所以我为委托定义了一个协议:

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

在我的班级中,我有一个成员来存储委托:

  IBOutlet id <glob_protocol> delegate;

在 Interface Builder 中连接类/实例时,现在没有类型检查。我可以作为代表连接任何班级。

有没有办法启用类型检查?我希望只有实现协议的类/实例才能设置为委托。

感谢您的任何提示, 托尔斯滕。

编辑: 我刚刚检查了 UIKit 的头文件以查看是否有任何其他信息或关键字,但我没有找到任何信息。我想知道 InterfaceBuilder 从哪些实例可以设置为委托的信息。

【问题讨论】:

    标签: objective-c delegates interface-builder typechecking


    【解决方案1】:

    这通常有效:

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

    虽然这不是您想要的级别/阶段,但它运作良好,因为连接不会经常更改。

    【讨论】:

    • 感谢您的回答,但这对我没有帮助。在代码中,我(当然)检查委托是否不为零,并在调用它之前检查他是否符合协议。我有兴趣让 InterfaceBuilder 检查一个实例是否可以设置为委托。
    • @Torsten 我理解问题和你想要的。我回答了我所知道的最接近的替代方案,因为目前没有您想要的支持/破解 (afaik)。
    • 好的,谢谢。如果不可能在 InterfaceBuilder 中启用检查,那么我将坚持我现在拥有的,只是在分配代表时要小心。
    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多