我正在制作一个应用程序,通过单击代表要下载的文件的图标从在线服务器下载文件,然后文件将保存到应用程序的沙箱中。
我已经设法做到了上面提到的那些。现在,我要做的是在图标上放置一个“检查”图像,以暗示用户它已经下载。
我已经尝试过UIImageView
在下载成功时将另一个图标放在图标顶部,但是当我完全终止应用程序并重新打开它时,图像消失了,我需要再次下载它才能显示它。
我怎么能做到这一点?
我正在制作一个应用程序,通过单击代表要下载的文件的图标从在线服务器下载文件,然后文件将保存到应用程序的沙箱中。
我已经设法做到了上面提到的那些。现在,我要做的是在图标上放置一个“检查”图像,以暗示用户它已经下载。
我已经尝试过UIImageView
在下载成功时将另一个图标放在图标顶部,但是当我完全终止应用程序并重新打开它时,图像消失了,我需要再次下载它才能显示它。
我怎么能做到这一点?
只需保留所有下载文件的数组,并在启动时检查要应用复选标记的文件。
例如:
当你得到图像时:
NSMutableArray *array;
array = [[NSUserDefaults standardUserDefaults] objectForKey:@"downloaded"].mutableCopy;
if (!array) array = [[NSMutableArray alloc] init];
[array addObject:somethingToIdentifyTheImageBy]; //For example, a string with the name of the image
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"downloaded"]
启动时:
NSArray *downloadedImages = [[NSUserDefaults standardUserDefaults] objectForKey:@"downloaded"];
forin (NSString *string in downloadedImages)
{
//Apply check mark
}
您无法在应用程序包中保存任何内容,但您可以使用 [NSData dataWithContentsOfURL:] 方法将图像存储在应用程序的文档目录中。这并不完全是永久性的,但至少在用户删除应用程序之前它会一直存在。
NSData *imageData = [NSData dataWithContentsOfURL:myImageURL];
NSString *imagePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"/myImage.png"];
[imageData writeToFile:imagePath atomically:YES];
使用以下代码将下载的图像保存到Library
设备目录并检索它,因为NSUserDefaults
不允许您存储大量数据。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = paths[0];
NSString *imageFilePath = [libraryDirectory stringByAppendingPathComponent:@"myImageIcon.jpg"];
NSError *error;
if (![[NSFileManager defaultManager] fileExistsAtPath:imageFilePath]) {
// File Exist at Library Directory, Just Read it.
NSData *imageData = [NSData dataWithContentsOfFile:imageFilePath];
}
else
{
// File Doesn't Exist at Library Directory, Download it From Server
NSURL *url = [NSURL URLWithString:@"YOUR Image File URL"];
NSData *imageData = [NSData dataWithContentsOfURL:url];
NSString *imagePath = [libraryDirectory stringByAppendingPathComponent:[url lastPathComponent]];
NSLog(@"Image Stored At %@",imagePath);
[imageData writeToFile:imagePath atomically:YES];
}