Przechowywanie danych dla różnych jednostek danych podstawowych w różnych plikach sklepów jest dobrze obsługiwane i dość proste. Jednak MagicalRecrd nie zapewnia żadnych wygodnych metod konfigurowania stosu danych podstawowych w ten sposób. Musisz po prostu przydzielić swój stos ręcznie i powiedzieć MagicalRecord, aby użyć utworzonego NSPersistentStoreCoordinator
. Oto jak to zrobiłem w SWIFT:
import Foundation
import CoreData
import MagicalRecord
class CoreDataSetup {
static func setupAutoMigratingStack(withContentConfigurationName contentConfigurationName: String, userConfirgurationNameName: String) {
MagicalRecord.cleanUp()
let managedObjectModel = NSManagedObjectModel.MR_defaultManagedObjectModel()
let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel!)
let contentURL = NSPersistentStore.MR_urlForStoreName(contentConfigurationName + ".sqlite")
let userURL = NSPersistentStore.MR_urlForStoreName(userConfirgurationNameName + ".sqlite")
let options = [
NSMigratePersistentStoresAutomaticallyOption : true,
NSInferMappingModelAutomaticallyOption: true,
NSSQLitePragmasOption: ["journal_mode": "DELETE"]
]
do {
try persistentStoreCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: contentConfigurationName, URL: contentURL, options: options)
try persistentStoreCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: userConfirgurationNameName, URL: userURL, options: options)
NSPersistentStoreCoordinator.MR_setDefaultStoreCoordinator(persistentStoreCoordinator)
NSManagedObjectContext.MR_initializeDefaultContextWithCoordinator(persistentStoreCoordinator)
} catch {
print("Error adding persistent store to coordinator: \(error) ")
}
}
}
Należy zauważyć, że w moim kodu mam na myśli swojej koncepcji „nasion” sklep jako „zawartość” i sklepu użytkownika definiowane jako „użytkownik”.
Aby rozwiązać drugi aspekt pytania, nie trzeba konfigurować magazynu zawartości, aby można było tworzyć kopie zapasowe, wystarczy, że połączysz się z adresami URL, w których przechowujesz każdy ze sklepów, umieszczając magazyn treści w katalogu tymczasowym, którego kopia zapasowa nie zawiera kopii zapasowej. i skopiowanie do tej lokalizacji jest uruchamiane z pakietu aplikacji, jeśli nie istnieje.
Witam @Ron, który sklep przechodzisz do setupCoreDataStackWithAutoMigratingSqliteStoreNazwa, jak masz dwa z nich? Ten bez nasion? – DAN