iOS网络应用作为原生应用

时间:2014-07-22 16:34:12

标签: ios uiwebview

我主要是一名网络开发人员,我已经完成了最后一项任务,即为我们正在举办的会议推出一个iOS应用程序。

我们建立了会议的网络应用程序,它托管在我们的网络服务器上。在教程here之后,我设法制作了一个非常简单的应用程序,它将在UIWebView中显示内容。

我们的其他开发人员为android构建了一些东西,它将缓存页面并检查服务器上的.txt文件以查看内容是否已更改。如果内容已更改,则将提取新内容。 (会议日程很容易变更)。

我想在我的iOS应用程序中实现类似的功能。有没有一种简单的方法可以做到这一点?

这就是我ViewController.m的样子:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize appView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSURL *path = [NSURL URLWithString:[NSString stringWithFormat:@"http://ict.uiuc.edu/railroad/GLXS/app/index.html"]];
    NSURLRequest *request = [NSURLRequest requestWithURL:path];
    [appView loadRequest:request];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

3 个答案:

答案 0 :(得分:3)

如果我没错,您唯一需要执行的操作就是在远程.txt文件上执行编辑时刷新Web视图。在我的视图中您可以在第一次运行应用程序时下载文件,然后在set timer上下载该文件,该计时器将在一个间隔(例如1分钟或1秒)内检查远程文件属性。 以下是触发的示例代码,如果修改了文件,则返回true。

//here is sample code that will return true if file is modified
//url:your remote file url. filePathe: local file that you downloade when you app is run for  first time
+ (BOOL)isServerURL:(NSString *)url NewerThanLocalFile:(NSString *)filePath {

if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {


    NSDictionary *attributes = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];

    NSDate *date = [attributes fileModificationDate];

    NSString *lastModifiedString = nil;
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString: url] cachePolicy:NSURLCacheStorageAllowed timeoutInterval:2];
    [request setHTTPMethod:@"HEAD"];
    NSHTTPURLResponse *response;
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error: NULL];
    if ([response respondsToSelector:@selector(allHeaderFields)]) {
        lastModifiedString = [[response allHeaderFields] objectForKey:@"Last-Modified"];
    }

    NSDate *lastModifiedServer = nil;
    @try {

        //set time format as required
        NSDateFormatter *df = [[NSDateFormatter alloc] init];
        df.dateFormat = @"EEE',' dd MMM yyyy HH':'mm':'ss 'GMT'";
        df.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
        df.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
        lastModifiedServer = [df dateFromString:lastModifiedString];
    }
    @catch (NSException * e) {
        NSLog(@"Error parsing last modified date: %@ - %@", lastModifiedString, [e description]);
    }

    if ([date laterDate:lastModifiedServer] == lastModifiedServer)
    {
        return YES;
    } else {
        return NO;
    }

} else {
    return YES;
}
}

如果计时器返回YES,请刷新您的网页视图。希望我很清楚。

答案 1 :(得分:2)

您基本上创建了一个非常简单的混合应用程序,即一部分是本机代码和部分Web内容。有很多框架使这种事情变得容易多了。最着名的是PhoneGap,其开源版本为Apache Cordova。你可以使用Cordova来构建你的应用程序,或者你可以查看源代码并在你自己的代码中使用相同的技术。

由于您的问题似乎与缓存内容有关,因此您可以查看HTML5的应用程序缓存,无论是否使用PhoneGap都可以正常运行。

有关详细信息,请查看 How to cache images and html files in PhoneGap Download images and save locally on iPhone Phonegap app

答案 2 :(得分:1)

您还可以定期检查服务器上的.txt文件是否已更改,如果是,请使用以下代码重新加载网站

[appView reload];

您可以在角落的网页视图顶部放置一个刷新按钮,您可以按需检查