我正在开发免费的应用程序,并有2张图片(一个透明的叠加层)作为背景。我将从我的网络每月更改这两个图像。图像更新过程,但应用程序如何知道,如果图像在网络上发生了变化?启动应用程序时,我想实现以下目标:
有人可以通过比较/网络请求流程指向正确的方向吗?
这是我到目前为止所拥有的:
viewDidLoad方法
self.imageData = [[NSMutableData alloc]init];
[NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.blahblah.com/newImage.jpg"]]delegate:self];
其余代码:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
self.length = [response expectedContentLength];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[self.imageData appendData:data];
float progress = (float)[imageData length]/(float)self.length;
[self.progressView setProgress:progress animated:YES];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"didFailWithError");
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
UIImage *img = [UIImage imageWithData:self.imageData];
self.backgroundImageView.image = img;
[self saveLocally:self.imageData];
}
// save
- (void)saveLocally:(NSData *)imgData
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSDate *aDate = [NSDate date];
NSTimeInterval interval = [aDate timeIntervalSince1970];
NSString *localFilePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.jpeg",(int)interval]];
[imgData writeToFile:localFilePath atomically:YES];
}
感谢您的时间!
答案 0 :(得分:1)
如果我能正确理解你的问题,你可以尝试一些方法。
一种方法是在网络上发布一些包含图像文件的文件名和/或大小的文本文件,如果文件大小与您在本地保存的图像及其大小不匹配,则可以然后更新(即下载新副本)设备上的图像。
这样,在下载较大的图像文件之前,您只需下载一个非常小的文件(包含这些数字的文本文件)。
答案 1 :(得分:1)
我希望你的应用程序中有一些json类型的功能,并通过imagename键值进行检查,并将旧的图像名称字符串与检索json数据键值进行比较,如果你找到更改,我做了更改我最近正在处理类似的应用程序的类型不完全相同,但是是服务器端应用程序,并且必须提供应用程序的离线模式,所以我得到的json我通常保存到我的库,即使图像以及下次我检索我的json数据我只同步新的类别,图像或其他什么。它的实时流视频应用程序类似于bbc新的应用程序类型