2012-02-24 132 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类的引用,但无法找到它。

你能帮助我吗? 非常感谢提前。

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

+ (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

你单身方法看起来像的路要走。你可以移动dispatch_once中的url创建代码来优化它。 – Felix 2012-02-24 19:04:07

+0

很好,谢谢你,在信贷到期时给予信贷:Colin Wheeler是我的灵感 - http://stackoverflow.com/a/2200751/1096476 – uem 2012-02-24 19:37:17

回答

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"]) { 
    } 
} 
相关问题