2015-01-05 4 views
0

내 앱의 캐시 기능을 구현하기 위해 NSKeyedArchiverNSKeyedUnarchiver을 사용하고 있습니다.NSHomeDirectory()에서 파일을 유지하는 방법은 무엇입니까?

앱이 실행될 때마다 캐시 파일을로드하기 위해 나는 NSHomeDirectory() 아래에 캐시 파일을 저장합니다. 코드 (C 함수)는 다음과 같습니다.

NSString* getArchivePathForId(NSString* modelId) 
{ 
    NSString *cacheIdentifier = @"CacheIdentifier"; 
    NSString *archiveDirPath = [NSHomeDirectory() stringByAppendingFormat:@"/tmp/%@/cachedModel/%@", getAppVersion(), cacheIdentifier]; 

    NSError* error; 
    if (![[NSFileManager defaultManager] fileExistsAtPath:archiveDirPath]) { 
     if (![[NSFileManager defaultManager] createDirectoryAtPath:archiveDirPath 
            withIntermediateDirectories:YES 
                attributes:nil 
                 error:&error]) 
     { 
      NSLog(@"Create directory tmp/cachedModel directory error: %@", error); 
      return nil; 
     } 
    } 

    NSString *archivePath = [archiveDirPath stringByAppendingFormat:@"/%@", modelId]; 
    return archivePath; 
} 

앱이 실행 중이거나 백그라운드 모드에서 다시 작동하는 한 정상적으로 작동합니다. 그러나 앱이 종료되고 다시 실행되면 캐시 된 보관 파일이 삭제됩니다.

앱을 시작할 때 마지막으로 저장된 캐시를로드 할 수 있도록 보관 파일을 유지할 수있는 방법이 있습니까?

나는 이미 응용 프로그램이 실행될 때마다 NSHomeDirectory()의 응용 프로그램 ID 부분이 다르다는 것을 알고 있습니다. 이것이 내 문제와 관련이 있습니까?

+1

포럼 사이트와 달리 "감사합니다"또는 "도움을 주셨습니다", [서명]을 사용하지 않습니다. "[안녕하세요, '고마워,'태그 라인 및 인사말을 게시물에서 삭제해야합니까?] (http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be 참조) "감사합니다." "감사합니다." –

답변

0

문제는 최상위 수준의 "tmp"디렉토리 이름입니다. 일반적으로 파일은 "문서"디렉토리에 저장됩니다

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths firstObject];` 

영구 캐시는 일반적으로 직접 NSLibraryDirectory를 사용하는 "도서관"아래에 배치됩니다.

참조 : 앱 출시 사이에 지속 할 필요가 없습니다 임시 파일을 작성하는 File System Programming Guide

TMP/ 사용이 디렉토리. 더 이상 필요하지 않으면 앱에서이 디렉토리의 파일을 삭제해야합니다. 그러나 앱이 실행되고 있지 않을 때 시스템에서이 디렉토리를 제거 할 수 있습니다.

+1

답장을 보내 주셔서 감사합니다. 그래서 NSHomeDirectory 대신 NSLibraryDirectory를 사용해야합니다. 그렇다면' Library/Caches /'링크에 언급 된 디렉토리에서 캐시 파일을이 디렉토리 또는'Library /'디렉토리에 두어야합니까? –