Метод WebView mainFrame возвращает ноль - PullRequest
4 голосов
/ 19 февраля 2010

У меня есть следующий код в контроллере окна как часть одноэлементного специального веб-браузера

+ (id)sharedPurchaseController {
    static SomeController *sharedController = nil;

    if (!sharedController) {
        sharedController = [[SomeController alloc] initWithWindowNibName:@"anXIB"];
    }

    return sharedController;
}

- (void)awakeFromNib{
    shouldReloadWeb = NO;
    [progressIndicator startAnimation:nil];
    NSString* urlText = [NSString stringWithString:@"http://www.google.com"];
    [[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlText]]];
}

-(void)windowWillClose:(NSNotification *)notification{
    shouldReloadWeb = YES;
}

- (void)windowDidBecomeKey:(NSNotification *)notification{
        if (shouldReloadWeb){
        WebFrame* aFrame = [webView mainFrame]; //<-- Returns nil second time
        [[webView mainFrame] reload];
        shouldReloadWeb = NO;
    }
}

Проблема в том, что когда NSWindow (браузер) закрывается, а затем снова открывается, на секундувремя [webView mainFrame] возвращает ноль.NSWindow появляется на экране, но WebView не отвечает.

Если я закомментирую код, который создает синглтон, все будет работать как положено.

Можно ли создать одноэлементный браузер с приложением, сохраняя WebView в Nib?

Спасибо, -Ben

1 Ответ

3 голосов
/ 19 февраля 2010

По умолчанию, WebView закрывается, когда закрывается окно контейнера.Когда WebView закрывается, он выгружает текущую страницу, прекращает загрузку любых текущих запросов и больше не обрабатывает новые запросы и не отправляет сообщения делегатов.Если вы хотите, чтобы WebView оставался вокруг, чтобы его можно было повторно использовать при открытии окна, вам следует вызвать

[webView setShouldCloseWithWindow:NO];

в вашем методе -awakeFromNib.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...