2012-02-24 4 views
5

나는 이미 How do I create a global UIManagedDocument instance per document-on-disk shared by my whole application using blocks?을 보았지만 실제로 얻지는 못했다.다른 객체간에 하나의 UIManagedDocument를 공유하려면 어떻게해야합니까?

내가 원했던 것은 전체 응용 프로그램을위한 핵심 데이터 데이터베이스 인 UIManagedDocument가 하나만 있어야한다는 것입니다. 다른 객체는 메서드를 호출하고 유일한 UIManagedDocument를 가져야합니다.

나는 클래스 메소드와 헬퍼 클래스를 사용 : 당신이 물음표에 의해 볼 수 있듯이

+ (UIManagedDocument *)getsharedDatabase:(NSString *)databaseName 
{ 
    NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
    url = [url URLByAppendingPathComponent:databaseName]; 
    // url is now "<Documents Directory>/<databaseName>" 

    if (![[NSFileManager defaultManager] fileExistsAtPath:[url absoluteString]]) 
    { 
     // does not exist on disk, so create one 
     UIManagedDocument *managedDocument = [[UIManagedDocument alloc] initWithFileURL:url]; 

     return managedDocument; 
    } 
    else 
    { 
     UIManagedDocument *managedDocument = **?????** 

     return managedDocument; 
    } 
} 

, 나는 기존 파일을 얻을하는 방법을 모르겠어요. UIManagedDocument 클래스 참조를 확인했지만 찾을 수 없습니다.

제발 도와 주시겠습니까? 미리 감사드립니다. 어떤 싱글 방법에 대해 같은 궁금

편집 ... : 당신이 디스크에 UIManagedDocuments 기존의 경우

+ (UIManagedDocument *) sharedDatabase 
{ 
    NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
    url = [url URLByAppendingPathComponent:@"databaseName"]; 
    // url is now "<Documents Directory>/databaseName" 

    static UIManagedDocument *managedDocument = nil; 
    static dispatch_once_t mngddoc; 

    dispatch_once(&mngddoc, ^{ 
      managedDocument = [[UIManagedDocument alloc] initWithFileURL:url]; 
    }); 

    return managedDocument; 
} 
+0

당신의 싱글 방법은 이동하는 방법처럼 보인다. URL 생성 코드를 dispatch_once 내부로 이동하여 최적화 할 수 있습니다. – Felix

+0

콜린 윌러 (Colin Wheeler)가 영감을 얻은 것에 대해 대단히 감사합니다. http://stackoverflow.com/a/2200751/1096476 – uem

답변

0

, 당신은 파일을 일치하는 디렉토리를 검색해야합니다. 일반적으로 파일에는 공통 파일 확장자와 같은 식별 속성이 있습니다. 이 같은

뭔가 :

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSURL *appDirectoryURL = [appDelegate applicationDocumentsDirectory]; 
NSArray *directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:appDirectoryURL includingPropertiesForKeys:nil options:NSDirectoryEnumerationSkipsHiddenFiles error:nil]; 

for (NSURL *fileURL in directoryContents) { 
    NSString *documentExtension = [fileURL pathExtension]; 

    if ([documentExtension isEqualToString:@"myfileextension"]) { 
    } 
} 
관련 문제