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