2012-08-23 2 views
1

NSDocumentDirectory에있는 모든 문서를 NSCachesDirectory로 이동 한 다음 내 다음 버전의 응용 프로그램을 처음으로 실행할 때 해당 NSDocument 파일을 모두 삭제하려고합니다. 내가 이것을하고있는 유일한 이유는 애플의 업데이트가 NSDocumentsDirectory에 .PDF 파일을 저장하는 것에 대해 거부 되었기 때문에 애플의 iOS 데이터 저장 가이드 라인을 따르는 것이다. (이유는 알 수 없다. 업데이트 (앱은 거의 2 년이되었으며, 이후 1 일부터 .PDF를 저장했습니다.), 아마도 엄격한 리뷰어가 있습니까?)NSDocumentDirectory에서 NSCachesDirectory로 모든 파일을 이동하는 방법은 무엇입니까?

이미 다운로드 한 .PDF 파일을 모두 NSCachesDirectory를 제거한 다음 NSDocumentDirectory에서 삭제하십시오.

이 작업을 수행하는 간단한 방법이 있습니까?

제공된 도움말을 미리 감사드립니다.

NSFileManager *fileManager = [NSFileManager defaultManager]; 

NSError *error; 
NSUserDefaults  *Defaults; 
int     launchCount; 

Defaults = [NSUserDefaults standardUserDefaults]; 
launchCount = [Defaults integerForKey:@"launchCount" ] + 1; 
[Defaults setInteger:launchCount forKey:@"launchCount"]; 
[Defaults synchronize]; 

if(launchCount == 1) { 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSArray *path2 = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *dest = [path2 objectAtIndex:0]; 

NSArray *Contents = [fileManager contentsOfDirectoryAtPath:documentsDirectory error:&error]; 

    for(NSString *source in Contents) 
    { 
     if(![fileManager moveItemAtPath:source 
           toPath:dest 
            error:&error]) 
     { 
      //TODO: Handle error 
      NSLog(@"Error: %@", error); 
     } 
    } 
} 

하지만 콘솔에서이 오류 받고 있어요 :

NSFilePath =있는 test.pdf, NSDestinationFilePath =/사용자/야경/라이브러리/응용 프로그램 지원/아이폰 시뮬레이터를

나는이 시도 /5.1/Applications/96EB01D1-81B7-4ECE-B337-D2D663969EE3/Library/Caches, NSUnderlyingError = 0xb566d50 "작업을 완료 할 수 없습니다 파일이 존재합니다."

+0

참고로 저장소 공간이 부족할 경우 캐시 디렉토리가 제거 될 수 있습니다. 이러한 위험없이이 PDF를 저장하려면 문서 디렉토리에 저장할 수 있지만 백업하지 않도록 표시해야합니다 (https://developer.apple.com/library/ios/#qa)./qa1719 /). 그러나 사용자가 다운로드 한 PDF *를 백업해야하며 원래 저장 위치가 적합해야한다고 주장합니다. – jrtc27

+0

동의합니다. 백업해야하지만 내 앱의 거부에 대해 반박해야합니까? – klcjr89

+0

업데이트가 긴급하지 않은 한 더 나은 사용자 환경을 제공해야한다고 생각하면 분쟁을 겪을 것입니다. 이 PDF는 어디서나 다운로드 할 수 있습니까? 아니면 모두 동일한 출처에서 제공되는 것입니까? 내가 묻는 이유는 그 PDF가 항상 액세스 가능하고 쉽게 다시 다운로드 할 수 있다면 백업해야한다고 말하기 때문입니다. – jrtc27

답변

2

예, 사용 NSFileManager를 :

문서 경로와 캐시 경로를 가져옵니다. 모든 파일을 반복하고 NSFileManager를 사용하여 파일을 이동하십시오.

- (void) moveAllDocs { 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    NSError *error = nil; 

    NSString *sourceDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
    NSString *destinationDirectory = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; 

    NSArray *contents = [fileManager contentsOfDirectoryAtPath:sourceDirectory error:&error]; 

    for(NSString *sourceFileName in contents) { 
     NSString *sourceFile = [sourceDirectory stringByAppendingPathComponent:sourceFileName]; 
     NSString *destFile = [destinationDirectory stringByAppendingPathComponent:sourceFileName]; 
     if(![fileManager moveItemAtPath:sourceFile toPath:destFile error:&error]) { 
      NSLog(@"Error: %@", error); 
     } 
    } 

} 
+0

원본 게시물에 코드를 추가했지만 위와 같이 콘솔에 오류가 발생하고 파일이 이동하지 않습니다. 의견 있으십니까? 다시 한 번 감사드립니다! – klcjr89

+0

은 이미 캐시 폴더에 사본이있는 것 같습니다. 대상에서 파일을 제거하거나 덮어 쓰기 옵션을 설정해야합니다. – nielsbot

+0

시뮬레이터를 다시 실행하기 전에 캐시 디렉토리에서 모든 것을 삭제 했으므로 그렇게 할 수 없습니까? – klcjr89