에
__block NSArray *records; //...get records
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
for (NSManagedObject *obj in records) {
NSString *imageName = [obj valueForKey:@"filename"];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",[obj valueForKey:@"remote_path"],imageName]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:NULL error:NULL];
[responseData writeToFile:[NSString stringWithFormat:@"%@/%@",documentsDirectory,imageName] atomically:NO];
[obj setValue:[NSNumber numberWithBool:YES] forKey:@"imageDownloaded"];
}
});
자세한 정보는 당신이 https://github.com/ZarraStudios/ZDS_Shared를 다운로드하고
// queue download
[[ZSAssetManager singleton] queueAssetForRetrievalFromURL:url];
// recover the download from the file system
UIImage *imagen = [[ZSAssetManager singleton] imageForURL:url];
왜이 라이브러리를 사용합니까 제안?
- 사용 가능한 대역폭 및 네트워크 상태에 따라 다운로드를 조절/일시 중지/다시 시작합니다. NSOperationQueue는 블록과 달리 일시 중단 될 수 있습니다.
- 충돌을 피하기 위해 URL 해시에서 파일 이름을 생성합니다.
- 응용 프로그램 시작시 이미 캐시 된 파일 목록을 메모리로 읽습니다.
- 선택적으로 응용 프로그램이 백그라운드로 이동할 때 캐싱을 허용합니다.
- 파일의 만료 날짜를 설정하거나 만료일을 설정할 수 없습니다.
- 캐시에서 UIImages를 너무 빨리 읽으므로 응용 프로그램에 메모리 경고가 표시되면 메모리 캐시가 플러시됩니다.
- 사용하기 쉽습니다 (위의 2 줄만).
독자적인 솔루션을 롤업하려면 이미 모든 것을 구현했기 때문에 해당 라이브러리의 소스 코드를 읽는 데 도움이 될 수 있습니다.
내 쿼리는 NSMutableArray에서 약 1000 개의 URL을 가지고 있습니다 .. 어디에서 모든 링크를 배치 할 수 있는지 말해 줄 수 있고 .. 전체 기능을 제공 할 수 있습니다. 매우 이해하기 힘듭니다. 그게 사실이지만 나는 당신의 일을 아주 좋은 일에 감사하고 감사한다. –
모바일 오버로드 나는 애플 고등 법원과 공공 도서관을 나가지 않기 때문에 답장을 보내 주시면 감사하겠습니다. 덕분에 –
나는 몇 시간 만에 좀 더 광범위한 예를 생각해 낼 수 있습니다. 나는이 저녁 늦게보다 완전한 기능으로 돌아올 것이다. – MobileOverlord