2013-05-29 5 views
0

UIImagePickerController를 사용하여 앱에서 두 장의 사진을 찍습니다. 아래에 선언 된 AppDelegate에 선언 된 두 속성의 NSData 형식으로 두 이미지를 저장합니다. 나는 다음과 같이 저장하고메모리 부족 경고로 iOS 앱이 작동하지 않음

@property(nonatomic, retain) NSData *dataCheckFront; 

@property(nonatomic, retain) NSData *dataCheckBack; 

이미지 :

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ 
     NSLog(@"camera took photo..."); 


     [self cleanUpOverlayAndCameraView]; 

     if (iCheckSide==FRONT) { 

     NSData *dataImage= [[NSData alloc] initWithData:UIImageJPEGRepresentation([info objectForKey:UIImagePickerControllerOriginalImage], 1.0)]; 
     ((AppDelegate*)[[UIApplication sharedApplication] delegate]).dataCheckFront= dataImage; 
     [dataImage release]; 
     dataImage= nil; 
    } 
    else { 
     NSData *dataImage= [[NSData alloc] initWithData:UIImageJPEGRepresentation([info objectForKey:UIImagePickerControllerOriginalImage], 1.0)]; 
     ((AppDelegate*)[[UIApplication sharedApplication] delegate]).dataCheckBack= dataImage; 
     [dataImage release]; 
     dataImage= nil; 

    } 
} 

나는 미래에 시간의 어느 시점까지-에 이미지를 필요로하고 나는 곳을 피해 보관 할 수 있습니다. 자체 전무 앱이 때문에 메모리 부족 문제로 종료되는 설정하기 전에,

[((AppDelegate*)[[UIApplication sharedApplication] delegate]) setDataCheckBack:nil]; 

    [((AppDelegate*)[[UIApplication sharedApplication] delegate]) setDataCheckFront:nil]; 

그러나 : 는 사용 후 나는 다음과 같은 무기 호에 해당 속성을 설정하고있다.

해결 방법?

+1

왜 사진을 캐시 또는 문서 폴더에 저장하지 않고 NSData를 앱 대리인에 저장하지 않으시겠습니까? –

+1

이처럼 강렬한 작업은 기본 스레드 대신 백그라운드 스레드에서 수행해야합니다 (UI 막힘을 피하기위한 팁). 좀 더 자세히 설명해 주시겠습니까? –

+0

@verbumdei : 귀하의 제안에 대해 감사드립니다. 사실 나는 iOS를 처음 사용합니다. 그래서 그것에 대해 많이 알지 마라. 제게 documenta 디렉토리에 저장하면 NSData가 아닌 저를 구할 수 있습니다. 다시 한번 .. 문서 폴더 나 임시 폴더에 저장해야합니까? 회신 해주십시오 .. –

답변

1

당신은/문서에 해당 이미지를 저장할 수있는 임시 디렉토리 자체 및 문서/temp 디렉토리에서 파일을 가져올 수 있습니다 필요한, 그래서 그것은 당신에게 어떤 메모리 문제를 제공하지 않습니다 때마다. 임시 디렉토리를 사용하면 다음에 앱을 실행할 때 이미지가 표시되지 않습니다.

관련 문제