Objective c XCode版本之间的编译问题(webkit)
我有一个从NSView派生的类,它包装了一个WebView实例。此类被设置为不同部分(框架加载、UI、策略和资源加载)的委托。这可以很好地编译XCode 6 升级到XCode 7后,我出现了错误,因为WebView的frameLoadDelegate等已从Objective c XCode版本之间的编译问题(webkit),objective-c,xcode6,webkit,xcode7,Objective C,Xcode6,Webkit,Xcode7,我有一个从NSView派生的类,它包装了一个WebView实例。此类被设置为不同部分(框架加载、UI、策略和资源加载)的委托。这可以很好地编译XCode 6 升级到XCode 7后,我出现了错误,因为WebView的frameLoadDelegate等已从id更改为id。为了使其再次编译,我将代码更改为: @interface WebBrowser : NSView <WebFrameLoadDelegate, WebUIDelegate, WebPolicyDelegate, WebRe
id
更改为id
。为了使其再次编译,我将代码更改为:
@interface WebBrowser : NSView <WebFrameLoadDelegate, WebUIDelegate, WebPolicyDelegate, WebResourceLoadDelegate> {
...
@界面浏览器:NSView{
...
这可以在XCode 7中编译并正常工作,但在XCode 6中不能。即使在那里也定义了委托,并且包含了WebKit,我仍然会发现这些委托未知的错误。这里有什么修复方法可以使它在XCode 6中也能工作
我正在考虑用一个#if/#endif来包装协议部分,但不知道可以使用什么作为条件。一个解决方案是通过显式地将委托强制转换为
(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;
}