我正在创建一个应用程序,通过单击代表要下载的文件的图标从在线服务器下载文件,然后该文件将保存到应用程序的沙箱中。
我设法做了上面提到的那些。现在,我想要做的是在图标上放置一个“检查”图像,以暗示用户已经下载了它。
我已经尝试过在下载成功时在图标上放置另一个UIImageView
,但是当我完全终止应用并重新打开它时,图像就消失了,我需要再次将其下载到展示它。
我将如何做到这一点?
答案 0 :(得分:0)
只需保留所有下载文件的数组,然后在启动时检查要将复选标记应用于哪些文件。
例如:
当你得到图像时:
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
}
答案 1 :(得分:0)
使用以下代码将已下载的图像保存到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];
}
答案 2 :(得分:0)
您无法在应用程序包中保存任何内容,但可以使用[NSData dataWithContentsOfURL:]方法将图像存储在应用程序的文档目录中。这不是永久性的,但它至少会在用户删除应用程序之前保持不变。
NSData *imageData = [NSData dataWithContentsOfURL:myImageURL];
NSString *imagePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"/myImage.png"];
[imageData writeToFile:imagePath atomically:YES];