2014-09-26 13 views
8

उम्मीद है कि आप मदद कर सकते हैं। मैं अपने ऐप में आज का समर्थन जोड़ रहा हूं, जो मेरी सभी कोरडाटा सामग्री को प्रबंधित करने के लिए MagicalRecord https://github.com/magicalpanda/MagicalRecord का उपयोग करता है।जादुई रिकॉर्ड (कोरडाटा) + आज एक्सटेंशन (आईओएस 8) ... क्या वे खेलेंगे?

मैं अपने बालों को आज के विस्तार में समझने के तरीके को समझने की कोशिश कर रहा हूं।

मैंने ऐप समूहों को http://blog.sam-oakley.co.uk/post/92323630293/sharing-core-data-between-app-and-extension-in-ios-8 के रूप में रेखांकित किया है, हालांकि सभी दस्तावेज और स्टैक ओवरव्लो पोस्ट जो मैं पढ़ रहा हूं, सीधे कोरडाटा का उपयोग करने से संबंधित है। MagicalRecord आपके लिए बहुत मेहनत करता है, यही कारण है कि मैंने इसका इस्तेमाल किया क्योंकि मैं इस परियोजना की शुरुआत में पूरी तरह से नया था। तो तरह बातें:

आप अपने कोर डाटा ढेर कहाँ आरंभ, आप अपने persistentStoreCoordinator इस तरह एक छोटे से कुछ करने के लिए एक दुकान जोड़ने होंगे:

[persistentStoreCoordinator 
addPersistentStoreWithType:NSSQLiteStoreType configuration:nil 
URL:storeURL options:options error:&error] 

यह बस एक बात है में आपके साझा ऐप समूह फ़ोल्डर में मौजूद किसी स्थान पर storeURL (आमतौर पर NSDocumentDirectory में कहीं भी) के लिए अपना पिछला मान बदलने का। आप इस का उपयोग कर

containerURLForSecurityApplicationGroupIdentifier: NSURL *directory = 
[[NSFileManager defaultManager] 
containerURLForSecurityApplicationGroupIdentifier:@"group.YourGroupName"]; 
NSURL *storeURL = [directory 
URLByAppendingPathComponent:@"YourAppName.sqlite"]; 

करना ... मैं समझ नहीं कर रहा हूँ कैसे/जहां लागू करने के लिए।

मुझे लगता है कि मुझे अपने ऐप में मैजिकल रिकार्ड स्टैक स्थापित करना होगा जैसा कि मैं अपने ऐप में करता हूं, लेकिन निश्चित रूप से यह असफल रहा है।

वास्तव में उम्मीद है कि कोई भी ऐसी स्थिति में हो सकता है और इस के साथ आगे बढ़ने के तरीके पर कुछ प्रकाश डालने में सक्षम हो।

पोस्ट करने के लिए मुझे जो भी कोड चाहिए, उसे बस मुझे बताएं।

अग्रिम

+0

शायद जोड़ने योग्य मूल्य, MagicalRecord w सभी कोरडाटा स्टैक को रैप करता है, इसलिए मैं पहले से ही काम कर रहा है जो टूटने और संभावित रूप से तोड़ने में संकोच कर रहा हूं। –

+0

@Emilie, क्या आप इसे हल करने का प्रबंधन करते थे? – marcelosalloum

उत्तर

4

धन्यवाद मैं एक ही समस्या मैं इस सूत्र का पालन करके इसे ठीक करने में सक्षम था। https://github.com/magicalpanda/MagicalRecord/issues/858

मैं पहली बार NSPersistentStore + MagicalRecord.m में निम्न विधि अद्यतन

- (NSURL *) MR_urlForStoreName:(NSString *)storeFileName 
{ 
    NSFileManager *fileManager = [[NSFileManager alloc] init]; 

    NSURL *directory = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"group.yourIdentifier"]; 
    NSURL *pathToStore = [directory URLByAppendingPathComponent:storeFileName]; 

    return pathToStore; 

// NSArray *paths = [NSArray arrayWithObjects:[self MR_applicationDocumentsDirectory], [self MR_applicationStorageDirectory], nil]; 
// NSFileManager *fm = [[NSFileManager alloc] init]; 
// 

// for (NSString *path in paths) 
// { 
// NSString *filepath = [path stringByAppendingPathComponent:storeFileName]; 
// if ([fm fileExistsAtPath:filepath]) 
// { 
// return [NSURL fileURLWithPath:filepath]; 
// } 
// } 
// 
// return [NSURL fileURLWithPath:[[self MR_applicationStorageDirectory] stringByAppendingPathComponent:storeFileName]]; 
} 

तब मेरे विस्तार के भीतर मैं सिर्फ अपने को देखने के लिए किया था निम्नलिखित लोड विधि गयी।

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [MagicalRecord setupCoreDataStackWithStoreNamed:<storeFileName>]; 
} 
+0

वह अंतिम भाग @ "समूह नहीं है।yourIdentifier ", यह स्टोरफाइलनाम के लिए जो कुछ भी इस्तेमाल किया जाना चाहिए। – jwhat

+0

यह सही है, मैंने अपना जवाब अपडेट कर दिया है। –

+0

यह वास्तव में कोर डेटा को खाली होने का कारण बनता है यदि आप इसे किसी मौजूदा ऐप के अपडेट के रूप में रिलीज़ करते हैं। एक और समाधान ढूंढ रहे हैं ... – jwhat

5

सुनिश्चित नहीं हैं कि अगर यह MagicalRecord के पिछले संस्करणों पर काम करता है, लेकिन 2.2 के रूप में आप सिर्फ स्टोर नाम के रूप में अंतिम url पारित कर सकते हैं:

NSFileManager *fileManager = [[NSFileManager alloc] init]; 

NSURL *directory = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"group.yellow"]; 
NSURL *pathToStore = [directory URLByAppendingPathComponent:kMagicalRecordDefaultStoreFileName]; 

[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:(id)pathToStore]; 
3

बदलें

[MagicalRecord setupCoreDataStackWithStoreNamed:@"Database"]; 

को

- (void)setupCoreDataStack 
{ 
    if ([NSPersistentStoreCoordinator MR_defaultStoreCoordinator] != nil) 
    { 
     return; 
    } 

    NSManagedObjectModel *model = [NSManagedObjectModel MR_defaultManagedObjectModel]; 
    NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; 

    NSURL *storeURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.yourgroup"]; 
    storeURL = [storeURL URLByAppendingPathComponent:@"Database.sqlite"]; 

    [psc MR_addSqliteStoreNamed:storeURL withOptions:nil]; 
    [NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:psc]; 
    [NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:psc]; 
} 
+1

मुझे यह विचार पसंद है, मूल रूप से चीजों को मैन्युअल रूप से सेट करना, लेकिन सावधान रहें। डिफ़ॉल्ट स्थिति को जांचने के लिए आपकी पहली पंक्ति सेट है डिफ़ॉल्ट रूप से एक समन्वयक बनाने के लिए डिफ़ॉल्ट रूप से यदि कोई अस्तित्व में नहीं है, तो यह हमेशा गैर-शून्य होगा और नीचे दिया गया कोई भी कोड नहीं चला जाएगा। यदि आप ऐसा करना चाहते हैं, तो आपको [MagicalRecordHelpers setShouldAutoCreateDefaultPersistentStoreCoordinator: NO] जोड़ना होगा ; उस विधि के बहुत ऊपर के लिए। –

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