0

我必须下载图像并将其保存到我的本地数据库中。所以我将图像存储在 NSData 中,而不是将其插入本地数据库。但是至少有 50 张图像来自服务器,因此将图像存储到 NSData 中,然后插入本地数据库需要更多时间。是否有任何解决方案,以便它会消耗更少的时间。

请给我建议。

4

3 回答 3

0

只需尝试使用 HCDownload 它是一个用于从 url 下载图像的组件。只需下载这个类并使用下面的代码就很容易了。下载完成后,将为所有图像一一调用委托方法 finishedDownloadingURL,然后将其路径(您存储的图像的路径)存储在数据库中。

HCD下载

如下所述使用它。

.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;
}

编辑

另一种简单的方法是

图片下载

于 2013-05-18T09:41:22.827 回答
0

处理从 Internet 下载图像的更常见方法是将其缓存到内存(NSURLCache)或磁盘(SDWebImageView)。并且只将“图片网址”保存到数据库中。

缓存机制将找到您使用该 URL 的下一个图像。

于 2013-05-18T08:14:19.927 回答
0

尝试将文件保存在磁盘上,并将文件路径放入数据库,而不是将 BLOB 插入数据库

换句话说:您的数据库将包含图像元数据和文件的绝对路径

你甚至可以这样做:

  • 创建文件路径

  • 下载图像时,在此创建的文件路径处将字节附加到文件中(几种方法 - 手动使用 NSURLConnection,或使用一些库,如附加 NSStream 的 AFHTTPConnection)

  • 检查是否一切正常,然后将文件路径字符串放入数据库或清理文件并报告错误

但最好是:

  • 下载文件到临时目录

  • 检查是否一切正常,然后移动到永久目录并将文件路径存储在数据库中

  • 如果需要,清理您的临时目录

  • 定期清理你的临时目录(顺便说一下,iOS 有时会清理它)

于 2013-05-18T09:05:27.110 回答