2013-01-24 19 views
5

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

मै मैजिकल रिकॉर्ड का उपयोग कर रहा हूं।

मैं रनटाइम पर फ़ाइल करने के लिए किसी भी प्रकार का डेटा सहेजता नहीं हूं। हालांकि मेरे ऐप को इस संदेश से खारिज कर दिया गया:

हमने पाया कि आपका ऐप आईओएस डेटा स्टोरेज दिशानिर्देशों का पालन नहीं करता है, जो ऐप स्टोर समीक्षा दिशानिर्देशों के अनुसार आवश्यक है।

यह मुझे "सेटिंग> iCloud> संग्रहण & बैकअप> संग्रहण प्रबंधित करें" की जांच करने की सलाह देता है लेकिन मेरा ऐप भी दिखाता नहीं है।

मुझे समझ में आता है कि मुझे कोर डेटा को चिह्नित करना चाहिए कि iCloud पर बैक अप न करें, लेकिन मुझे यह समझ में नहीं आता कि यह कैसे करें। माना जाता है कि मुझे इस तरह कुछ लागू करना चाहिए, लेकिन मुझे नहीं पता कि इसे मेरी मूल डेटा फ़ाइलों पर कैसे लागू किया जाए।

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { 
assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); 

NSError *error = nil; 
BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES] 
           forKey: NSURLIsExcludedFromBackupKey error: &error]; 
if(!success){ 
    NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error); 
} 
return success; } 

उत्तर

1

खोजें: NSPersistentStoreCoordinator+MagicalRecord.m

फिर, लगता है:

- (NSPersistentStore *)MR_addSqliteStoreNamed:(id)storeFileName withOptions:(__autoreleasing NSDictionary *)options 

विधि के नीचे, आप देखेंगे:

if (!store) 
{ 
    [MagicalRecord handleErrors:error]; 
} 

बदलें कि करने के लिए:

if (!store) 
{ 
    [MagicalRecord handleErrors:error]; 
} 
else 
{ 
    [self addSkipBackupAttributeToItemAtURL:url]; 
} 

मुझे बताएं कि विधि आपके लिए अलग दिखती है, लेकिन मैं अपने स्वयं के कार्यान्वयन के लिए उपयोग करता हूं। बस सुनिश्चित करें कि आप अपने प्रश्न में उल्लेख किए गए फ़ंक्शन में ड्रॉप करते हैं।

+1

में MagicalRecord एक पॉड के रूप में इस्तेमाल किया जा रहा है, तो यह किसी भी समय है कि हम इस पॉड के लिए एक अद्यतन खींच ओवरराइट नहीं होगा? – Matt

2

नीचे मैकिगल रिकार्ड की स्रोत फ़ाइलों को बदलने से बेहतर हो सकता है। तेज

MagicalRecord.setupCoreDataStackWithAutoMigratingSqliteStoreNamed("somedb.sqlite") 
let dbPath = NSPersistentStore.MR_urlForStoreName("somedb.sqlite") 
do { 
    try dbPath.setResourceValue(NSNumber(bool: true), forKey: NSURLIsExcludedFromBackupKey) 
} catch let error { 
    print(error) 
} 
+0

यह जाने का रास्ता है। उद्देश्य सी लोगों के लिए: 'NSURL * dbURL = [NSPersistentStore MR_urlForStoreName: @" storename "]; एनएसईआरआर * त्रुटि = शून्य; बूल सफलता = [dbURL setResourceValue: [NSNumber numberWithBool: YES] के लिए: NSURLIs बहिष्कृत FromBackupKey त्रुटि: और त्रुटि]; ' – Richard

+0

मैं पूरी निर्देशिका को बैकअप से बाहर करने का सुझाव देता हूं, न केवल .sqlite। अन्यथा जर्नलिंग डीबी फाइलों को बैकअप में शामिल किया जाएगा। अगर मुझे अच्छी तरह याद है MagicalRecord डिफ़ॉल्ट रूप से अनुप्रयोग समर्थन के अंदर एक निर्देशिका बनाता है जहां यह डेटाबेस को संग्रहीत करता है। 'DbPath = NSPersistentStore.MR_urlForStoreName (storeFileName) .URLByDeletingLastPathComponent' जाने – Lubbo

+0

' चलो अगर dbPath = NSPersistentStore.MR_urlForStoreName (storeFileName) .URLByDeletingLastPathComponent { है { कोशिश dbPath.setResourceValue (NSNumber: तो शायद बेहतर इस तरह एक स्तर ऊपर बाहर करने के लिए (बूल: सच), के लिए: NSURLIsExcludedFromBackupKey) } पकड़ने में त्रुटि दें { प्रिंट (त्रुटि) } } ' – Lubbo