代码之家  ›  专栏  ›  技术社区  ›  user160917

WebView mainFrame方法返回nil

  •  4
  • user160917  · 技术社区  · 16 年前

    作为singleton特殊web浏览器的一部分,我在窗口控制器中有以下代码

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

    [webView mainFrame]

    如果我注释掉创建单例的代码,一切都会按预期工作。

    有没有办法创建一个带有应用程序的单例浏览器,同时将WebView保留在Nib中?

    1 回复  |  直到 16 年前
        1
  •  3
  •   Rob Keniger    16 年前

    默认情况下 WebView 在其容器窗口关闭时关闭。当 网络视图 网络视图 若要在重新打开窗口时保留它以便重用,您应该调用

    [webView setShouldCloseWithWindow:NO];
    

    -awakeFromNib 方法。