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