2012-02-24 13 views
5

Ho già dato un'occhiata a How do I create a global UIManagedDocument instance per document-on-disk shared by my whole application using blocks? ma non ho capito.Come condividere un UIManagedDocument tra oggetti diversi?

Quello che voglio ottenere è che ci dovrebbe essere solo un UIManagedDocument - un database di dati di base - per l'intera app. Oggetti diversi dovrebbero chiamare un metodo e ottenere l'unico UIManagedDocument.

Io uso una classe di supporto con un metodo di classe:

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

Come si può vedere dai punti interrogativi, non so come ottenere il file esistente. Ho controllato il riferimento alla classe UIManagedDocument ma non sono riuscito a trovarlo.

Potete aiutarmi, per favore? Molte grazie in anticipo.

EDIT mi chiedevo ... che dire di un metodo Singleton come ad esempio:

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

il metodo di Singleton appare come la strada da percorrere. puoi spostare il codice di creazione dell'URL all'interno di dispatch_once per ottimizzarlo. – Felix

+0

Grande, grazie, per dare credito a chi è dovuto il credito: Colin Wheeler è stata la mia ispirazione - http://stackoverflow.com/a/2200751/1096476 – uem

risposta

0

Se avete UIManagedDocuments su disco esistente, è necessario cercare la directory per i file corrispondenti. In genere, i file avrebbero un attributo identificativo, come un'estensione di file comune.

Qualcosa di simile a questo:

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