Как я могу поделиться одним UIManagedDocument между различными объектами? - PullRequest
5 голосов
/ 24 февраля 2012

Я уже взглянул на Как создать глобальный экземпляр 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;
}

1 Ответ

0 голосов
/ 25 сентября 2012

Если у вас есть UIManagedDocuments на диске, вам нужно найти в каталоге подходящие файлы. Как правило, файлы имеют некоторый идентифицирующий атрибут, например общее расширение файла.

Примерно так:

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"]) {
    }
}
...