在每个应用程序启动时使UIWebView像新的一样

时间:2012-02-27 01:42:00

标签: ios xcode uiwebview browser-cache

如果有人能够回答那么简单的问题会非常棒。

我有一个简单的UIWebView用于登录某个服务。但是,当我重新加载应用程序时,它仍然保持登录状态。我需要做的是每次应用程序启动时都像新的一样创建UIWebView。我不确定界面构建器中是否存在某个选项,或者可能是某种方法,我可以放置在应用程序终止时调用的方法中,以便它释放WebView或其他东西。

2 个答案:

答案 0 :(得分:4)

您需要做的是不保存UIwebView的缓存。您可以使用以下简单代码执行此操作:

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];

将代码放在UIwebview代码中。

或者在ApplicationDidFinishLoad(或类似的东西,哈哈)中你可以删除缓存:

[[NSURLCache sharedURLCache] removeAllCachedResponses];

修改

你在评论中提出了一些问题。您可以执行以下代码:

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"]];

        UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0.f, 0.f, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height - 20.f)];
        [webView setAutoresizingMask:(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)];

//No Cache\\

      NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
        [NSURLCache setSharedURLCache:sharedCache];

//No Cache\\

        webView.delegate = self;
        [webView loadRequest:request];
        [self.view addSubview:webView];

确定,

删除特定请求

[[NSURLCache sharedURLCache] removeCachedResponseForRequest:NSURLRequest];

或者从UIWebView中删除al cookies

for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {

    if([[cookie domain] isEqualToString:someNSStringUrlDomain]) {

        [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
    }
}
祝你好运, 森

答案 1 :(得分:1)

我的答案将分为多个部分,以涵盖多个基础。

1 - 应用程序可能为用户设置了cookie,因此即使启动新应用程序,旧cookie也会保留登录详细信息,因此您仍然会登录。

要杀死cookie,请在加载uiwebview之前尝试此操作(即在viewwillload或其他方法中)

NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]) {
   [storage deleteCookie:cookie];
}

2 - 这是在多线程手机上(iOS4或更新的3GS或更新版本)?你确定该应用程序正在终止,而不是仅仅去后台吗?如果是这种情况,并且您刚刚启动了之前的应用程序(您仍然登录),则需要挂钩 - (void)applicationDidBecomeActive:(UIApplication *)应用程序并删除旧的Web视图并添加新的视图