0

我正在制作一个应用程序,通过单击代表要下载的文件的图标从在线服务器下载文件,然后文件将保存到应用程序的沙箱中。

我已经设法做到了上面提到的那些。现在,我要做的是在图标上放置一个“检查”图像,以暗示用户它已经下载。

我已经尝试过UIImageView在下载成功时将另一个图标放在图标顶部,但是当我完全终止应用程序并重新打开它时,图像消失了,我需要再次下载它才能显示它。

我怎么能做到这一点?

4

3 回答 3

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
}
于 2013-05-10T02:31:58.320 回答
0

您无法在应用程序包中保存任何内容,但您可以使用 [NSData dataWithContentsOfURL:] 方法将图像存储在应用程序的文档目录中。这并不完全是永久性的,但至少在用户删除应用程序之前它会一直存在。

NSData *imageData = [NSData dataWithContentsOfURL:myImageURL];
NSString *imagePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"/myImage.png"];
[imageData writeToFile:imagePath atomically:YES];
于 2013-05-10T05:10:53.683 回答
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];
}
于 2013-05-10T04:26:49.717 回答