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;
}
我有一个从 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;
}