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

时间:2015-09-22 10:28:46

标签: objective-c xcode6 webkit xcode7

我有一个派生自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包装协议部分,但不知道我可以使用什么作为条件。

1 个答案:

答案 0 :(得分:0)

一种解决方案是通过将委托显式地转换为(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;
}