2012-02-24 20 views
5

Zaten How do I create a global UIManagedDocument instance per document-on-disk shared by my whole application using blocks? bir göz attım ama gerçekten anlamıyorum.Bir UIManagedDocument'i farklı nesneler arasında nasıl paylaşırım?

Elde etmek istediğim, tüm uygulama için yalnızca bir UIManagedDocument - bir çekirdek veri veritabanı olması gerektiğidir. Farklı Nesneler bir yöntemi çağırmalı ve tek UIManagedDocument dosyasını almalıdır.

Bir sınıf yöntemi ile bir yardımcı sınıf kullanın: Eğer soru işaretleri de görebileceğiniz gibi

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

, ben Mevcut dosyayı nasıl bilmiyorum. UIManagedDocument sınıfı başvurusunu kontrol ettim, ancak bulamadım.

Yardım edebilir misiniz, lütfen? Çok teşekkürler şimdiden. ne tekil yöntemi hakkında gibi merak ediyorum

DÜZENLEME ...: Eğer diskte UIManagedDocuments mevcut varsa

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

sizin tekil yöntem gitmek için yol gibi görünüyor. optimize etmek için url oluşturma kodunu dispatch_once içine taşıyabilirsiniz. – Felix

+0

Kredi, vadesi geldiğinde kredi vermek için çok teşekkür ederim, Colin Wheeler benim ilham kaynağımdı - http://stackoverflow.com/a/2200751/1096476 – uem

cevap

0

, dosyaları eşleştirmek için dizin arama yapmak gerekir. Tipik olarak, dosyalar ortak bir dosya uzantısı gibi bazı tanımlayıcı özelliklere sahip olur. Böyle

şey:

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"]) { 
    } 
} 
İlgili konular