2010-01-25 12 views
6

मैं आश्चर्य है कि अगर अपने द्विआधारी संपत्ति में कोर डेटा के साथ छवियों को स्टोर करने के लिए एक बुद्धिमान पसंदCoreData (iPhone के लिए) भंडारण छवियों

कहना मैं फिल्मों का एक संग्रह है और मैं एक संपत्ति में छवि डीवीडी कवर सहेजना चाहते एक कवर के औसत आकार 20/30kb (320x480px)

कारण मैं ऐसा करना चाहते हैं, भंडारण प्रबंधन के लिए है एक बार मैं फिल्म को नष्ट मुझे पता है छवि भी हटा दी जाती है

मैं सिर्फ काफी नहीं कर रहा हूँ है सुनिश्चित करें कि यह एक अच्छा विचार है, डेटा लोड, गति?

किसी के पास इसका अनुभव है?

+0

यह http://stackoverflow.com/questions/1168954/storing-large-eg-image-movie-files-in-core-data-on-the-iphone और http: // stackoverflow का डुप्लिकेट है। कॉम/प्रश्न/20 9 0028/कोर-डेटा-स्टोरेज-इमेजेस-आईफोन –

उत्तर

11

ऐसा लगता है कि कोर डेटा में छवियों को संग्रहित करना एक अच्छा विचार नहीं है, और मुझे पूरा यकीन है कि मैंने इसे ऐप्पल के प्रोग्रामिंग गाइड में से एक पर भी पढ़ा है। बस इस पर विचार करें, जब आप अपना संग्रह प्राप्त करते हैं, तो सभी छवियों को भी स्मृति में लोड किया जाएगा, भले ही आप केवल 8 छवियां प्रदर्शित कर रहे हों, आपका संपूर्ण चित्र संग्रह कोर डेटा द्वारा लोड किया जाएगा।

आप आप छवि फ़ाइलों को हटाने सुनिश्चित करने के लिए जब एक चाल रिकॉर्ड नष्ट कर दिया गया मैं सुझाव है कि आप managedObjectContext द्वारा नोटिफिकेशन को सुनने और फ़ाइलों को हटाने जब एक फिल्म नष्ट कर दिया गया चाहते हैं:

आप willSave के लिए पंजीकृत कर सकते हैं या अधिसूचना बचाओ, प्रत्येक के अपने फायदे/नुकसान के साथ।

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextDidSave:) name:NSManagedObjectContextDidSaveNotification object:managedObjectContext]; 

हो रही है नष्ट कर दिया वस्तुओं:

- (void) contextDidSave:(NSNotification *)notification 
{ 
    NSDictionary *userInfo = [notification userInfo]; 
    for (NSManagedObject *currObject in [userInfo objectForKey:NSDeletedObjectsKey]) 
    { 
     // Code for deleting file associated with the NSManagedObject, you can still 
     // access the managed object's properties. 
    } 
} 
+2

कोर डेटा में बाइनरी डेटा संग्रहीत करने में कुछ भी गलत नहीं है, खासकर ओपी के साथ काम कर रहे छवि आकारों में से कुछ भी गलत नहीं है। प्रश्न के लिए एक नोट के रूप में पोस्ट किए गए दो लिंक की समीक्षा करें। 100 केबी के तहत कुछ भी सीधे कोर डेटा में संग्रहीत किया जा सकता है। –

+1

बेशक यह किया जा सकता है, लेकिन मेरी राय में यह करने का सबसे अच्छा तरीका नहीं है, जब तक कि आप बाइनरी डेटा वास्तव में लाया और स्मृति में लोड नहीं किया जाता है। अन्यथा 100 रिकॉर्ड लाने से किसी भी कारण से स्मृति में 2/3 एमबी लोड हो जाएगा। –

+0

पसंदीदा रूप से केवल फाइलपैथ को कोर्डटा में स्ट्रिंग के रूप में स्टोर करें और उन्हें इस तरह लोड करें? – powerj1984

1

यह मेरे लिए हुआ है कि यदि आप किसी अन्य दृष्टिकोण है जो बेहतर हो सकता है अगर आप पहले से ही अपनी फिल्म इकाई के लिए NSManagedObject उपवर्गीकरण रहे हैं का उपयोग कर सकते हैं।

आप NSManagedObject पर didSave या willSave विधि को कार्यान्वित कर सकते हैं और जांच हटाई गई संपत्ति है। यदि इसे हटा दिया गया है, तो डिस्क से छवि हटाएं।

7

प्रबंधित ऑब्जेक्ट में छवि के पथ को संग्रहीत करने का सबसे अच्छा तरीका है और फिर ऑब्जेक्ट की prepareForDeletion विधि में फ़ाइल को हटाएं।

0

में मेरा उत्तर देखें:

Can I access the files used for external binary storage in Core Data?

आप कोर डाटा में बड़ी फ़ाइलों को अब का उपयोग कर स्टोर कर सकते हैं 'की अनुमति देता है बाह्य संग्रह' विकल्प। इसके साथ एकमात्र समस्या अब पथ द्वारा वास्तविक फ़ाइलों तक पहुंच नहीं है, केवल शुद्ध बाइनरी डेटा। मैं एक 'रचनात्मक' समाधान के साथ आया (चाहे यह सबसे अच्छा अभ्यास किसी का अनुमान है), लेकिन यह आपको अपनी फ़ाइलों को प्रबंधित करने के लिए कोर डेटा का उपयोग करने की अनुमति देगा, जबकि अभी भी उनके पथ से वास्तविक फ़ाइलों तक पहुंचने में सक्षम है।

संबंधित मुद्दे