0

我的目标是在 iOS 上使用 UIWebView 构建一个 Web 应用程序,基本上就像 BlackBerry 为 Webworks 所做的那样。

阅读后,我不确定缓存是如何工作的,所以我尝试了以下测试:

开始使用“Hello World”创建简单的 Web 应用程序。

构建并运行应用程序 - 工作正常

然后更改了 login.html(这就是我的 hello world 的名称) 我所做的更改是我用指向另一个页面的超链接重新创建了 hello world。

当我再次构建并运行时,旧页面仍然显示。

所以我假设某处有缓存?

有没有做以下/最好的事情?

  • 禁用缓存,因为速度并不重要我们所有的文件都在磁盘上?
  • 每次启动应用程序时清除缓存?

有没有人遇到过这个?

谢谢

我试过了: 如何从 UIWebview 或 dealloc UIWebview 中删除缓存

另一个更新------

尝试了另一个简单的测试,我删除了我的 HTML 文件夹,其中包含所有 html、css、js 文件,所以它现在在垃圾箱中。再次运行应用程序并从项目中删除 html 引用,它仍然可以完美地加载它们。所以整个东西都缓存在某个地方。

作为另一次尝试,我还添加了:

-(void)dealloc{
    self.webView.delegate = nil;
    self.webView = nil;
    [webView release];
    [super dealloc];
}

在 NativeViewController.m 这没有帮助。

我的应用程序代码:`

#import "NativeViewController.h"

@implementation NativeViewController

@synthesize webView;

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"login" ofType:@"html"];  
NSData *htmlData = [NSData dataWithContentsOfFile:filePath];  
if (htmlData) {  
    NSBundle *bundle = [NSBundle mainBundle]; 
    NSString *path = [bundle bundlePath];
    NSString *fullPath = [NSBundle pathForResource:@"login" ofType:@"html" inDirectory:path];
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:fullPath]]];

}
}


- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];

// Release any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
[self.webView removeFromSuperview];
self.webView.delegate = nil;
self.webView = nil;
}


 -(void)webViewDidFinishLoad{
[[NSURLCache sharedURLCahce] removeAllCachedResponses];
}
- (void)dealloc {
[webView release];
[super dealloc];
}
@end

`

4

2 回答 2

1
Yes..I encountered the same problem..      
I solved it by adding the below statement  in didFinishLaunchingWithOptions method of AppDelegate class

  [[NSURLCache sharedURLCache] removeAllCachedResponses];
于 2013-01-17T10:05:26.590 回答
1

试试这个

if ([htmlData length]==0) {
//no data
}

如果数据的长度为 0,这将不会加载数据。在其他情况下,即使您从项目中删除 html 文件,它也会在模拟器中存在,除非您不重置它。

希望能帮助到你。

于 2013-01-17T11:12:36.390 回答