如何在不同对象之间共享一个UIManagedDocument?

uem*_*uem 5 iphone core-data ipad ios5 uimanageddocument

我已经看过如何使用块在我的整个应用程序共享的每个磁盘上创建一个全局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;
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您在问号中看到的那样,我不知道如何获取现有文件.我检查了UIManagedDocument类引用但找不到它.

你能帮我吗?提前谢谢了.

编辑 我想知道...单身方法怎么样,如:

+ (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;
}
Run Code Online (Sandbox Code Playgroud)

Hun*_*ter 0

如果磁盘上已有 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"]) {
    }
}
Run Code Online (Sandbox Code Playgroud)