【问题标题】:Objective-C extension syntaxObjective-C 扩展语法
【发布时间】:2013-05-21 14:47:15
【问题描述】:

以上 SO 答案来自here

我的问题是:

建议的代码似乎按预期工作。但问题是 Xcode 会针对红色箭头所指的语句发出警告。 警告是:

找不到实例方法'-scrollViewDidScroll'(返回类型默认值 到'id')

另一个问题是“-scrollViewDidScroll”返回“void”而不是编译器假定的“id”。

希望摆脱警告并让编译器知道返回类型是“void”。

希望有人能帮忙...

【问题讨论】:

  • 看时间戳:'10
  • 感谢您的评论。但是你的意思是3年前的语法不一样了?
  • 不——不应该。我只是指出这一点。
  • 请注意,这是一个类别,而不是一个扩展......同样,该方法应该以防止冲突的东西作为前缀。
  • 感谢您的评论。坦率地说,我认为类别和扩展是一回事。感谢您指出这一点...

标签: iphone objective-c xcode


【解决方案1】:

self.delegate 应声明为 id<UIScrollViewDelegate> 实例。

【讨论】:

  • 感谢您的帮助...声明是:@interface Web_View_Delegate : UIViewController :)
【解决方案2】:

确保委托的类型有公共方法-scrollViewDidScroll。

【讨论】:

    【解决方案3】:

    显式转换可能可以为您解决这个问题。

    【讨论】:

      【解决方案4】:

      我遇到了类似的情况,我在以编程方式设置的回调上调用选择器。它产生了一个警告,因为编译器(正确地)假设它在编译时无法判断选择器是否对该对象有效。我使用以下代码模式来抑制警告,这也应该适用于您的情况。

      //Suppress compiler warnings
      #pragma clang diagnostic push
      #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
      
      //Perform method that generates warning
      [self.delegate scrollViewDidScroll: scrollView];
      
      //Stop suppressing compiler warnings
      #pragma clang diagnostic pop
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-14
        • 1970-01-01
        相关资源
        最近更新 更多