我必须下载图像并将其保存到我的本地数据库中。所以我将图像存储在 NSData 中,而不是将其插入本地数据库。但是至少有 50 张图像来自服务器,因此将图像存储到 NSData 中,然后插入本地数据库需要更多时间。是否有任何解决方案,以便它会消耗更少的时间。
请给我建议。
只需尝试使用 HCDownload 它是一个用于从 url 下载图像的组件。只需下载这个类并使用下面的代码就很容易了。下载完成后,将为所有图像一一调用委托方法 finishedDownloadingURL,然后将其路径(您存储的图像的路径)存储在数据库中。
如下所述使用它。
.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;
}
编辑
另一种简单的方法是
处理从 Internet 下载图像的更常见方法是将其缓存到内存(NSURLCache)或磁盘(SDWebImageView)。并且只将“图片网址”保存到数据库中。
缓存机制将找到您使用该 URL 的下一个图像。
尝试将文件保存在磁盘上,并将文件路径放入数据库,而不是将 BLOB 插入数据库
换句话说:您的数据库将包含图像元数据和文件的绝对路径
你甚至可以这样做:
创建文件路径
下载图像时,在此创建的文件路径处将字节附加到文件中(几种方法 - 手动使用 NSURLConnection,或使用一些库,如附加 NSStream 的 AFHTTPConnection)
检查是否一切正常,然后将文件路径字符串放入数据库或清理文件并报告错误
但最好是:
下载文件到临时目录
检查是否一切正常,然后移动到永久目录并将文件路径存储在数据库中
如果需要,清理您的临时目录
定期清理你的临时目录(顺便说一下,iOS 有时会清理它)