XCode 版本之间的编译问题 (webkit)

Compilation issue between XCode versions (webkit)

我有一个从 NSView 派生并包装 WebView 实例的 class。此 class 设置为不同部分的委托(框架负载、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 包装协议部分,但不知道我可以使用什么作为条件。

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

- (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;
}