画像のダウンロードとキャッシュを処理する NSObject クラスを作成する必要があります。例
インターフェイスファイル
#import <Foundation/Foundation.h>
@interface ImageCache : NSObject
{
UIImage *background;
}
@property (nonatomic,retain) UIImage *background;
-(void)getImages;
-(void) storeImages;
-(void) clearCache;
@end
実装
@implementation ImageCache
@synthesize background;
- (void) cacheImage: (NSString *) ImageURLString : (NSString *)imageName
{
NSURL *ImageURL = [NSURL URLWithString: ImageURLString];
// Generate a unique path to a resource representing the image you want
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex: 0];
NSString *docFile = [docDir stringByAppendingPathComponent: imageName];
// Check for file existence
if(![[NSFileManager defaultManager] fileExistsAtPath: docFile])
{
// The file doesn't exist, we should get a copy of it
// Fetch image
NSData *data = [[NSData alloc] initWithContentsOfURL: ImageURL];
UIImage *image = [[UIImage alloc] initWithData: data];
// Is it PNG or JPG/JPEG?
// Running the image representation function writes the data from the image to a file
if([ImageURLString rangeOfString: @".png" options: NSCaseInsensitiveSearch].location != NSNotFound)
{
[UIImagePNGRepresentation(image) writeToFile: docFile atomically: YES];
}
else if
(
[ImageURLString rangeOfString: @".jpg" options: NSCaseInsensitiveSearch].location != NSNotFound ||
[ImageURLString rangeOfString: @".jpeg" options: NSCaseInsensitiveSearch].location != NSNotFound
)
{
[UIImageJPEGRepresentation(image, 100) writeToFile: docFile atomically: YES];
}
}
}
- (UIImage *) getCachedImage : (NSString *)imageName
{
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* cachedPath = [documentsDirectory stringByAppendingPathComponent:imageName];
UIImage *image;
// Check for a cached version
if([[NSFileManager defaultManager] fileExistsAtPath: cachedPath])
{
image = [UIImage imageWithContentsOfFile: cachedPath]; // this is the cached image
}else
{
NSLog(@"Error");
}
return image;
}
-(void)getImages
{
//I just googled background image and took first image I found for this example
NSString *backgroundURL = @"http://www.dvd-ppt-slideshow.com/images/ppt-background/background-3.jpg";
[self cacheImage:backgroundURL: @"Background"];
}
-(void) clearCache
{
//If you ever need to clear the cache for whatever reason, good to have a method to handle it
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex: 0];
NSString *docFile1 = [docDir stringByAppendingPathComponent: @"Background"];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager removeItemAtPath:docFile1 error:NULL];
}
-(void) storeImages
{
background = [self getCachedImage:@"Background"];
}
@end
私が与えた例では、1つの画像を使用しました。しかし、あなたは私が確信している考えを得る. そのイメージをダウンロードして保存する場合は、次のようにします。ViewController に ImageCache クラスをインポートして呼び出すだけです
ImageCache *cacheMe = [[ImageCache alloc] init];
[cache getImages];
[cacheMe storeImages];
UIImageView *image = [[UIImageView alloc] initWithImage:[cacheMe background]];
そして、それはあなたがする必要があるすべてです。キャッシング専用のクラスがある場合は、はるかに簡単です。それが役立つことを願っています!!
編集:アップデートは2行のコードを忘れていました。私はそれを自分でテストしましたが、今はうまくいくはずです