2014-09-09 2 views
1

내 응용 프로그램에서 웹 서비스에서 Json 데이터를 수신합니다.CoreData 및 이미지 by URL

이 날짜를 핵심 데이터 모델에 매핑했습니다.

일부 엔티티에는 표시해야하는 이미지의 URL을 나타내는 필드가 있습니다. 이 상황을 관리하는 더 좋은 방법은 무엇입니까?

내 엔티티 유형 NSData에서 필드를 추가하여 이미지 저장 위치를 ​​지정할 수 있으므로 간단한 캐시가 있습니다. ES :

그렇지 않으면 나는 이미 다운로드 한 이미지를 얻을 수있는 실제 캐시를 구현할 수 있습니다 getImageByURL

는 이러한 유형의 상황에 대한 CoreData 특히 솔루션이 있습니까 (이미 디렉토리에 다운로드 한 이미지를 저장)?

답변

0

정말 응용 프로그램 디자인 결정. 어떤 경우 든 전체 이미지를 기본 테이블에 넣으려면 'BinaryData'형식 (BLOB)을 사용할 수 있습니다. 다른 방법이 있습니다

항상 온라인 인 앱의 경우 1. URL을 핵심 데이터에 저장하고 URL에서 가져옵니다.

오프라인 지원. 1. 이미지를 blob 으로 저장하십시오. 2. 문서 폴더에 저장하고 핵심 데이터 파일에 대한 참조를 갖습니다. 3. 웹 캐시 지원 타사 라이브러리를 사용하고 URL을 저장하십시오. URL을 다시 가져 오면 웹 캐시는 캐시 된 이미지를 반환합니다. 콘텐츠가 잠시 동안 순환되어야하고 오프라인 모드가 필요한 경우 다른 두 가지보다 선호 할 수 있습니다. 온라인 - -

+0

문서 폴더에 이러한 유형의 데이터를 저장하면 iOS 데이터 저장 가이드 라인을 위반하게되며 검토 중에 앱이 거부 될 수 있습니다. URL 로딩 시스템에서도 이미 데이터를 캐시하고 있으므로 캐시의 다른 계층을 추가 할 필요가 없습니다. – quellish

0

두 경우 우리는 을 처리해야 오프라인

1. 온라인 : 앱은 다음 사용하는 것이 좋습니다 다음 온라인으로 만 지원하는 경우

EGOImageView을 추가하려면 다음 코드를 추가하려면 파일에 다음 행을 추가 * egoImgView = [[EGOImageView alloc] initWithFrame : CGRectMake (0, 0, 290, 118)]; complaintImgView.imageURLString = [NSString stringWithFormat : @ "% @", imageURLString];

2. 오프라인 : 앱이 온라인과 오프라인을 모두 지원

  • , 그냥 coredata, 다운로드의 이미지 이름을 저장하고 문서 경로에 이미지를 저장합니다.
  • 다음은 coredata에 저장된 이름으로 문서 경로에 이미지를 저장하는 코드입니다.

#define DOCUMENTS_PATH [[NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex : 0] stringByAppendingPathComponent : @ "다운로드"]

이 문서 경로에 이미지를 저장하려면

- (void)saveImageSynchronouslyInDocumentsWithUrl:(NSString *)serverImageURL withName:(NSString` `*)coredataImageName` 
    { 
NSLog(@"Synchronous Image urls %@",serverImageURL); 

NSURL *url = [NSURL URLWithString: imageUrl]; 

NSString *imagePath = [DOCUMENTS_PATH stringByAppendingPathComponent:imageName]; 

NSError *error = nil; 

NSData *imageData = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error: &error]; 
if (!error) { 
    [imageData writeToFile:imagePath atomically:YES]; 

} 
} 

으로 문서 경로에서 이미지 검색

UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@",DOCUMENTS_PATH, coredataImageName]]; 
+0

URL 로딩 시스템이 이미 캐싱을 수행합니다. – quellish