画像をダウンロードしてローカル データベースに保存する必要があります。そのため、画像を NSData に保存し、それをローカル データベースに挿入しています。ただし、サーバーから少なくとも 50 個の画像が送信されるため、画像を NSData に保存してからローカル データベースに挿入するには、さらに時間がかかります。時間を短縮するための解決策はありますか。
私に提案してください。
HCDownload を試してみてください。これは、URL から画像をダウンロードするために使用するコンポーネントです。このクラスをダウンロードして以下のコードを使用するだけで、とても簡単です。ダウンロードが完了したら、デリゲート メソッド finishedDownloadingURL がすべての画像に対して 1 つずつ呼び出され、そのパス (保存した画像のパス) をデータベースに保存します。
以下に説明するようにこれを使用します。
.h ファイル
#import "HCDownloadViewController.h"
@interface HomeViewController_iPhone : UIViewController<HCDownloadViewControllerDelegate>
{
HCDownloadViewController *tblDownloadHairStyle;
}
@property (nonatomic,retain) HCDownloadViewController *tblDownloadHairStyle;
.m ファイル
@synthesize tblDownloadHairStyle;
- (void)viewDidLoad
{
[super viewDidLoad];
tblDownloadHairStyle=[[HCDownloadViewController alloc] init];
tblDownloadHairStyle.delegate=self;
}
//Where you download the image
[self createDocumentDirectory:@"MyFolder"]; //create folder for save photo
NSString *pathHair=[self getDocumentDirectoryPath:@"MyFolder"];
tblDownloadHairStyle.downloadDirectory = pathHair;
// your other code just get the image path
NSString *strimage_path=[hairDictonary objectForKey:@"image_path"];
strimage_path=[NSString stringWithFormat:@"http://yoururr.com/%@",strimage_path];
[tblDownloadHairStyle downloadURL:[NSURL URLWithString:strimage_path] userInfo:hairDictonary];
#pragma mark-
#pragma mark-HCDownloadViewController Delegate Method
- (void)downloadController:(HCDownloadViewController *)vc startedDownloadingURL:(NSURL *)url userInfo:(NSDictionary *)userInfo {
NSLog(@"startedDownloadingURL=%@",url);
}
- (void)downloadController:(HCDownloadViewController *)vc finishedDownloadingURL:(NSURL *)url toFile:(NSString *)fileName userInfo:(NSDictionary *)userInfo {
NSLog(@"finishedDownloadingURL =%@",url);
}
- (void)downloadController:(HCDownloadViewController *)vc failedDownloadingURL:(NSURL *)url withError:(NSError *)error userInfo:(NSDictionary *)userInfo {
NSLog(@"failedDownloadingURL=%@",url);
}
#pragma mark - File Functions - Document Functions
-(void)createDocumentDirectory:(NSString*)pStrDirectoryName
{
NSString *dataPath = [self getDocumentDirectoryPath:pStrDirectoryName];
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
[[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:NULL];
}
-(NSString*)getDocumentDirectoryPath:(NSString*)pStrPathName
{
NSString *strPath = @"";
if(pStrPathName)
strPath = [[kAppDirectoryPath objectAtIndex:0] stringByAppendingPathComponent:pStrPathName];
return strPath;
}
編集
別の簡単な方法は
インターネットからの画像のダウンロードを処理するより一般的な方法は、単にメモリ (NSURLCache) またはディスク (SDWebImageView) にキャッシュすることです。「画像のURL」のみをデータベースに保存します。
キャッシュ メカニズムは、その URL を使用する次の画像を見つけます。