在iphone中加载网页并查看历史记录

时间:2010-07-10 08:31:00

标签: iphone objective-c uiwebview

伪代码

pageUrl = "http://www.google.com"

if(pageUrl == never Downloaded)
  Download pageUrl
else
{
   Display Saved Version
   Mean while download pageUrl
   When done display new version

}

如何在UIWebview的目标C中执行类似的操作? 另外,为这种情况保存网页的最佳方法是什么? PList,SQLite?

1 个答案:

答案 0 :(得分:1)

Plist是解决问题的最佳方式。 与SQLite数据库相比,iPhone / Objective-c可以非常快速地访问plist文件。

让我给你一些示例代码。

请参阅 - 编辑一段时间后。

编辑:

  • 创建项目的步骤&连接网络视图
    • 创建新项目 - >基于视图的应用程序。
    • 给出名称“yourProjName”(由您决定)
    • 打开“yourProjNameViewController.xib”
    • 拖动&删除UIWebView
    • 打开“yourProjNameViewController.h”文件
    • 放置变量IBOutlet UIWebView *wView;
    • 在界面构建器中连接
  • 将属性列表文件添加到项目的步骤

    • 展开项目树下的资源组
    • 右键点击“资源” - >添加 - >新文件
    • 选择模板类别 - osx - >资源
    • 选择属性列表文件
    • 提供文件名“LoadedURL.plist”
    • 将根类型更改为数组
    • 保存“LoadedURL.plist”文件
  • 现在将以下代码放在“yourProjNameViewController.m”文件中。


#import "yourProjNameViewController.h"
#define documentsDirectory_Statement NSString *documentsDirectory; \
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); \
documentsDirectory = [paths objectAtIndex:0];


@implementation WebViewLoadViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    // your url to load
    NSString *strToLoad=@"http://www.mail.yahoo.com";


    // file management code
    // copy file to documents directory
    documentsDirectory_Statement;
    NSFileManager *fm=[NSFileManager defaultManager];
    if(![fm fileExistsAtPath:[documentsDirectory stringByAppendingPathComponent:@"LoadedURL.plist"]]){
        [fm copyItemAtPath:[[NSBundle mainBundle] pathForResource:@"LoadedURL" ofType:@"plist"] 
                    toPath:[documentsDirectory stringByAppendingPathComponent:@"LoadedURL.plist"]
                     error:nil];
    }

    // array from doc-dir file
    NSMutableArray *ar=[NSMutableArray arrayWithContentsOfFile:[documentsDirectory stringByAppendingPathComponent:@"LoadedURL.plist"]];

    // check weather file has url data or not.
    BOOL fileLocallyAvailable=NO;
    NSString *strLocalFileName=nil;
    NSUInteger indexOfObject=0;
    if([ar count]>0){
        for (NSDictionary *d in ar) {
            if([[d valueForKey:@"URL"] isEqualToString:strToLoad]){
                fileLocallyAvailable=YES;
                strLocalFileName=[d valueForKey:@"FileName"];
                break;
            }
            indexOfObject++;
        }
    }
    if(fileLocallyAvailable){
        NSDictionary *d=[ar objectAtIndex:indexOfObject];
        strLocalFileName=[d valueForKey:@"FileName"];
    } else {
        NSMutableDictionary *d=[NSMutableDictionary dictionary];
        [d setValue:strToLoad forKey:@"URL"];

        NSString *str=[[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:strToLoad]];

        [str writeToFile:[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%02i.htm",[ar count]]] 
              atomically:YES
                encoding:NSUTF8StringEncoding error:nil];

        strLocalFileName=[NSString stringWithFormat:@"%02i.htm",[ar count]];
        [d setValue:[NSString stringWithFormat:@"%02i.htm",[ar count]] forKey:@"FileName"];
        [ar addObject:d];

        [ar writeToFile:[documentsDirectory stringByAppendingPathComponent:@"LoadedURL.plist"]
             atomically:YES];
    }
    NSURL *u=[[NSURL alloc] initFileURLWithPath:[documentsDirectory stringByAppendingPathComponent:strLocalFileName]];
    NSURLRequest *re=[NSURLRequest requestWithURL:u];
    [wView loadRequest:re];
    [u release];
}

`