나는 이미 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;
}
당신의 싱글 방법은 이동하는 방법처럼 보인다. URL 생성 코드를 dispatch_once 내부로 이동하여 최적화 할 수 있습니다. – Felix
콜린 윌러 (Colin Wheeler)가 영감을 얻은 것에 대해 대단히 감사합니다. http://stackoverflow.com/a/2200751/1096476 – uem