2012-02-24 22 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 के अंदर यूआरएल निर्माण कोड को स्थानांतरित कर सकते हैं। – Felix

+0

ग्रेट, धन्यवाद, श्रेय देय क्रेडिट देने के लिए: कॉलिन व्हीलर मेरी प्रेरणा थी - http://stackoverflow.com/a/2200751/1096476 – uem

उत्तर

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"]) { 
    } 
} 
संबंधित मुद्दे