2009-11-24 6 views
0

애플리케이션 세션 간의 데이터 지속성에 관한 간단한 질문입니다.iPhone UIImage - 데이터 지속성

내 응용 프로그램을 사용하면 사용자가 UIImagePickerController를 사용하여 라이브러리에서 이미지를 선택할 수 있습니다. 선택한 사진이 응용 프로그램의 배경으로 사용됩니다.

UIImagePickerController 대리자 메서드는 실제로 이미지 경로가 아닌 이미지를 반환하므로 사용자 세션에서이 이미지를 유지하는 가장 좋은 방법은 무엇입니까?

그 밖의 모든 데이터는 SQL Server에서 가져 오므로 다른 데이터는 유지할 필요가 없지만 서버에 이미지를 저장해야하는 추가 오버 헤드는 원하지 않습니다. 사용자가 응용 프로그램을 열 때마다 배경 이미지를 먼저 서버에서 바이트 배열로 다운로드 한 다음 이미지로 변환해야한다는 것을 의미합니다.

나는 이미지를 저장할 수 있습니다 다음 코드 발견 :

- (void)saveImage:(UIImage *)image withName:(NSString *)name { 
//save image 
NSData *data = UIImageJPEGRepresentation(image, 1.0); 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:name]; 
[fileManager createFileAtPath:fullPath contents:data attributes:nil]; 

} 

나는 순간에 맥에없는 걸, 그래서 나는이 코드를 테스트 할 수 없습니다,하지만 난 코드에 대한 몇 가지 질문을 위 :

나는 많은 파일들이 파일 시스템을 어수선하게 만들고 싶지 않다. 그래서 나는 하나의 배경 파일 (background.png)을 원한다. 위의 코드는이 파일이 이미 존재했던 상황을 어떻게 처리합니까?

기존 파일을 덮어 쓰거나 오류가 발생합니까?

이미지를 다시로드하는 방법은 무엇입니까?

답변

1

는 먼저 파일을 제거해야합니다 :

- (void)saveImage:(UIImage *)image withName:(NSString *)name { 
    //save image 
    NSData *data = UIImageJPEGRepresentation(image, 1.0); 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                 NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:name]; 

    NSError *error = nil; 
    if([fileManager fileExistsAtPath:fullPath]){ 
     if(! [fileManager removeItemAtPath:fullPath error:&error]) { 
      NSLog(@"Failed deleting background image file %@", error); 
      // the write below should fail. Add your own flag and check below. 
     } 
    } 
    [data writeToFile:fullPath atomically:YES]; 
} 

로 작동해야 다시 읽는 것은 다음과

... 
UIImage *bgImage = [UIImage imageWithContentsOfFile:fullPath]; 
...