मैं कॉन्फ़िगरेशन का उपयोग करके इस समस्या को हल करने में सक्षम था। चूंकि जादुई रिकॉर्ड हमेशा कॉन्फ़िगरेशन पैरामीटर के लिए null
भेजता है, इसलिए मैंने setupCoreDataStackWithAutoMigratingSqliteStoreNamed
को तोड़ दिया और इसे एक विधि के साथ बदल दिया जो एकाधिक कॉन्फ़िगरेशन का समर्थन करता है।
क्योंकि मैजिकल रिकॉर्ड ऑटो माइग्रेशन को संभालने का अच्छा काम करता है, इसलिए मैं पहले setupCoreDataStackWithAutoMigratingSqliteStoreNamed
पर कॉल करता हूं, इसके बाद क्लीनअप होता है, और फिर मैं अपना प्रतिस्थापन कोड प्रदान करता हूं।
मेरे पास मेरे बीज डेटा ऑब्जेक्ट्स के साथ एक ऑब्जेक्ट मॉडल है जो "बीज" कॉन्फ़िगरेशन और "उपयोगकर्ता" कॉन्फ़िगरेशन को सौंपा गया उपयोगकर्ता ऑब्जेक्ट असाइन करता है। जादुई रिकॉर्ड पहले से ही शुरू किया जा चुका है ताकि यदि आवश्यक हो तो ऑटो माइग्रेट कर सकता है।
+(void) RB_setupMultipleStores:(NSString *) seedStoreName userStore:(NSString *) userStoreName
/* change persistent store to one with multiple configurations. Assumes Magical Record is initialized. */
{
NSError * error= nil;
[MagicalRecord cleanUp];
NSManagedObjectModel * model = [NSManagedObjectModel MR_defaultManagedObjectModel];
NSURL *seedURL = [NSPersistentStore MR_urlForStoreName:[seedStoreName stringByAppendingString:@".sqlite"]];
NSPersistentStoreCoordinator * coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
NSPersistentStore * seedStore =[coordinator
addPersistentStoreWithType:NSSQLiteStoreType
configuration:@"Seed"
URL:seedURL
options:options
error:&error];
if (!seedStore || error)
{
NSLog(@"Error setting up seed store:%@ for %@", [error localizedDescription], seedURL);
exit(-1);
}
NSURL *userURL = [NSPersistentStore MR_urlForStoreName:[userStoreName stringByAppendingString:@".sqlite"]];
NSPersistentStore * userStore = [coordinator
addPersistentStoreWithType:NSSQLiteStoreType
configuration:@"User"
URL:userURL
options:options
error:&error];
if (!userStore || error)
{
NSLog(@"Error setting up user store:%@ for %@", [error localizedDescription], userURL);
exit (-1);
}
[NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator];
[NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator];
}
इसके अलावा, एमआर 3.0 समवर्ती ढेर है जो इसे करने के बाद समस्या का समाधान कर सकता है।
स्रोत
2014-06-03 19:04:51
हाय @ रॉन, आप किस स्टोर को सेटअप करने के लिए पास करते हैं CoreDataStackWithAutoMigratingSqliteStore नामांकित है क्योंकि आपके पास उनमें से दो हैं? कोई बीज नहीं है? – DAN