2012-02-24 16 views
5

Ya he echado un vistazo a How do I create a global UIManagedDocument instance per document-on-disk shared by my whole application using blocks? pero realmente no lo entiendo.¿Cómo comparto un UIManagedDocument entre diferentes objetos?

Lo que quiero lograr es que solo haya un UIManagedDocument, una base de datos central, para toda la aplicación. Los diferentes objetos deberían llamar a un método y obtener el único UIManagedDocument.

utilizo una clase de ayuda con un método de la clase:

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

Como se puede ver por los signos de interrogación, no sé cómo obtener el archivo existente. Revisé la referencia de la clase UIManagedDocument pero no pude encontrarla.

¿Me puede ayudar, por favor? Muchas gracias de antemano.

EDITAR Me preguntaba ... ¿qué pasa con un método singleton tales como:

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

su método de Singleton se ve como el camino a seguir. puede mover el código de creación de url dentro de dispatch_once para optimizarlo. – Felix

+0

Genial, gracias, para dar crédito donde se debe crédito: Colin Wheeler fue mi inspiración - http://stackoverflow.com/a/2200751/1096476 – uem

Respuesta

0

Si ha UIManagedDocuments en disco existente, es necesario buscar en el directorio de archivos coincidentes. Normalmente, los archivos tendrían algún atributo de identificación, como una extensión de archivo común.

Algo como esto:

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