2012-05-20 2 views
3

이 코드를 사용하여 이미지를 문서 폴더에 저장합니다.iOS - 문서 폴더에 여러 이미지 저장

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,  NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"savedImage.png"]; 
    UIImage *image = imageView.image; // imageView is my image from camera 
    NSData *imageData = UIImagePNGRepresentation(image); 
    [imageData writeToFile:savedImagePath atomically:NO]; 

이 이미지는 savedImage.png 이름을 계속해서 기록하므로 여러 이미지를 저장할 수있는 방법을 찾고 있습니다.

나는 구글이든 그것을 찾고 마음을하지 않지만, 정말

건배 :-) 세계를 지연 잘못된 키워드를 찾고 있기 때문에 나는 그것이라는 것을 알 필요가

당신이 필요로하는
+0

각 이미지를 다른 파일에 저장 하시겠습니까? – rdelmar

답변

7

3 행의 이미지 documentsDirectory 경로에 추가 할 파일 이름을 변경하십시오. 때마다 이미 사용되지 않은 다른 이름을 사용해야합니다. NSFileManager에는 파일이 있는지 확인할 수있는 메서드가있어서 파일 이름을 만들고 그 위치에 있는지 테스트 할 수 있습니다. 그렇다면 중복 카운트를 증가시키고 다음 시도를 시도하십시오.

num이 정수인 경우 마지막으로 사용한 것으로 알고 있으므로 어딘가에서 초기화했습니다.

// your code to get the directory here, as above 

NSFileManager *fm = [NSFileManager ...] 

do { 
    savedImagePath = [documentsDirectory stringByAppendingPathComponent: 
     [NSString stringWithFormat: @"%@-%d.png", @"savedImage", num]]; 
    num += 1; // for next time 

    if (![fm fileExistsAtPath: savedImagePath]) 
    { 
     // save your image here using savedImagePath 
     exit; 
    } 
} while (//some kind of test for maximum tries/time or whatever) 

당신은 NSFileManager를 인스턴스와 정확한 파일을 얻을 수있는 구문을 찾아해야합니다

는 메소드 서명을 존재하지만 그것의 요점입니다.

+0

쉬운 방법을 취하지는 않지만, 내가 준 코드의 일부분을 어떻게 처리할지 모르겠습니다. 처음으로이 문제가 발생했습니다 :-) –

+0

생각해보십시오 : 파일 시스템에서 두 번째 파일을 같은 이름의 같은 위치에두면 기존 파일이 바뀝니다. 맞습니까? 같은 위치에 저장하려면 다른 이름을 지정해야합니다. Finder에서 파인더는 파일 이름에 번호 또는 "사본"을 추가하여 자동으로이를 수행합니다 (복제 할 때). 위의 코드는 이것을 보여 주려고하고 끝에 숫자를 추가 할 것을 제안합니다. 위에 열거 한 부분에 대한 설명서를 읽으십시오. 'stringWithFormat :'또는'NSFileManager' 등등. – Dad

+0

당신은 문서를 읽고 기존 클래스가하는 일과 그들이하는 일을 이해해야합니다. Rishi의 대답은 위의 날짜 추가에 대한 대답도 옵션이며, 이미 존재하는지 테스트 할 필요가 없기 때문에 (밀리 초가 포함 된 경우) 더 쉬울 수 있습니다. – Dad

1

그럴 때마다 새 파일을 만들 수 있습니다.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"YOURiMAGEfILE.IMAGEeXTENSION"]; 
NSFileManager *fileManager = [NSFileManager defaultManager]; 

    if (![fileManager fileExistsAtPath: path]) 
    { 
     path = [documentsDirectory stringByAppendingPathComponent: [NSString stringWithFormat: @"YOURiMAGEfILE.IMAGEeXTENSION] ]; 
    } 

다음은 생성 된 파일에 위의 작업을 수행 할 수 있습니다. 당신은 현재의 날짜 _ 시간에 파일을 저장하면

+0

죄송합니다. 필자는이 솔루션을 필요로하지 못했습니다. 어쩌면 나는 그것을 오해하고있다 :-) –

5

당신은

-(NSString*)getCurrentDateTimeAsNSString 
{ 
    NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
    [format setDateFormat:@"yyyyMMddHHmmss"]; 
    NSDate *now = [NSDate date]; 
    NSString *retStr = [format stringFromDate:now]; 
    [format release]; 

    return retStr; 
} 
+0

좋은 지적이다. 나는 그것에 대해 조사 할 것이다 :-) –

1

그것이 당신이 나를 위해 일하는 데 도움이 희망 같은 이름의 재정 문제에 대해 걱정할 필요가 없습니다!

if let image = info[UIImagePickerControllerOriginalImage] as? UIImage 
    { 
     let i = Int(arc4random()) 

     let str = String(i).appending(".png") 

     let fileManager = FileManager.default 
     let paths = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent(str) 

     print(paths) 

     let imageData = UIImagePNGRepresentation(image) 
     fileManager.createFile(atPath: paths as String, contents: imageData, attributes: nil) 
    } 
    else{ 
     print("error") 

    } 
+0

답변은 언제나 환영하지만, * 위의 *가 어떻게 문제를 해결하는지에 대한 간략한 설명을 포함 해주십시오. – Leigh

+0

전 사실 여기 신참이에요. –

관련 문제