Я уже взглянул на Как создать глобальный экземпляр 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, но не смог ее найти.
Можете ли вы помочь мне, пожалуйста?
Большое спасибо заранее.
EDIT
Мне было интересно ... как насчет одноэлементного метода, такого как:
+ (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;
}