我主要是一名网络开发人员,我已经完成了最后一项任务,即为我们正在举办的会议推出一个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
答案 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];
或
您可以在角落的网页视图顶部放置一个刷新按钮,您可以按需检查