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;
}
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
Grande, grazie, per dare credito a chi è dovuto il credito: Colin Wheeler è stata la mia ispirazione - http://stackoverflow.com/a/2200751/1096476 – uem