2015-09-22 4 views
0

У меня есть класс, который получен из NSView и обертывает экземпляр WebView. Этот класс устанавливается как делегат для разных частей (загрузка фрейма, пользовательский интерфейс, загрузка политики и ресурсов). Это скомпилируется и хорошо работает с XCode 6.Проблема компиляции между версиями XCode (webkit)

После обновления до XCode 7 у меня появились ошибки, так как FrameLoadDelegate WebView и т. Д. Были изменены только с id, например. id<WebFrameLoadDelegate>. Для того, чтобы сделать его скомпилировать снова я изменил код:

@interface WebBrowser : NSView <WebFrameLoadDelegate, WebUIDelegate, WebPolicyDelegate, WebResourceLoadDelegate> { 
... 

Это компилирует и отлично работает с XCode 7, но не в XCode 6. Несмотря на то, что делегаты определены там и WebKit включен я до сих пор получить ошибки, чтобы эти делегаты были неизвестны. В чем тут проблема, чтобы заставить его работать и в XCode 6?

Я думал об обертывании части протокола с помощью # if/# endif, но не знаю, что я мог бы использовать в качестве условия.

ответ

0

Одним из решений является замораживание компилятора XCode 7 (LLVM 7) путем явного делегирования делегата (id) вместо того, чтобы класс выполнял протоколы.

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

 Смежные вопросы

  • Нет связанных вопросов^_^