【问题标题】:Compilation issue between XCode versions (webkit)XCode 版本之间的编译问题 (webkit)
【发布时间】:2015-09-22 10:28:46
【问题描述】:

我有一个派生自 NSView 并包装了 WebView 实例的类。此类被设置为不同部分(框架加载、UI、策略和资源加载)的委托。这可以编译并与 XCode 6 很好地配合使用。

升级到 XCode 7 后出现错误,因为 WebView 的 frameLoadDelegate 等已从 id 更改为例如id<WebFrameLoadDelegate>。为了让它再次编译,我将代码更改为:

@interface WebBrowser : NSView <WebFrameLoadDelegate, WebUIDelegate, WebPolicyDelegate, WebResourceLoadDelegate> {
...

这可以在 XCode 7 中编译并正常工作,但在 XCode 6 中则不行。即使在那里也定义了委托并且包含了 WebKit,我仍然会收到这些委托未知的错误。这里有什么修复方法使它也可以在 XCode 6 中工作?

我正在考虑用#if/#endif 包装协议部分,但不知道我可以使用什么作为条件。

【问题讨论】:

    标签: objective-c xcode6 webkit xcode7


    【解决方案1】:

    一种解决方案是通过将委托显式转换为 (id) 来使 XCode 7 编译器 (LLVM 7) 静音,而不是让类实现协议。

    - (instancetype)initWithObject: ...
    {
      self = [super initWithFrame: NSMakeRect(10, 10, 10, 10)];
      if (self)
      {
        mBrowser = [[[WebView alloc] initWithFrame: [self frame]] autorelease];
        [self addSubview: mBrowser];
        [mBrowser setFrameLoadDelegate: (id)self];
        [mBrowser setUIDelegate: (id)self];
        [mBrowser setPolicyDelegate: (id)self];
        [mBrowser setResourceLoadDelegate: (id)self];
        [mBrowser setShouldCloseWithWindow: YES];
      }
      return self;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多