2013-01-08 3 views
10

ho trovato nulla su migration rules in caso di variazione del deletion rule di un mio modello CoreData iniziale managedObjects relationshipmigrazione CoreData - eliminare le regole di relazioni

conteneva un ente con una relazione. La regola di eliminazione di questa relazione era cascade. Ho dovuto modificare questo comportamento in Nullify.

Pertanto ho creato un new version of my coredata model ma senza alcuna migrazione leggera e funziona ancora. Quindi mi ferirei se avessi dovuto aggiungere una nuova versione del mio modello o se la modifica delle regole di cancellazione (ad esempio da cascade a nullify) non influisce/richiede alcuna migrazione.

Qualche suggerimento?

+0

Nessuna migrazione leggera? Quindi non usi 'NSMigratePersistentStoresAutomaticallyOption' o' NSInferMappingModelAutomaticallyOption' quando aggiungi l'archivio persistente? –

+0

No Sto usando il seguente per creare il mio negozio: addPersistentStoreWithType coordinator: configurazione NSSQLiteStoreType : nil URL: storeURL opzioni: nil errore: & error] – Alexander

risposta

16

Le regole di cancellazione specificano il comportamento di Core Data in fase di esecuzione: se un oggetto viene eliminato, altre relazioni possono essere impostate su NULL oppure gli oggetti correlati possono essere eliminati.

Pertanto, ho assunto che le regole di cancellazione siano memorizzate solo nel modello Core Data, ma non nel file di archivio permanente.

Per verificare ciò, sono stati creati 2 file di archivio da 2 modelli di Core Data con entità identiche, ma regole di cancellazione diverse. Il NSStoreModelVersionHashes nel dizionario persistente metadata era identico.

In effetti, entrambi i file SQLite erano identici con la sola eccezione di "Z_UUID" nella tabella "Z_METADATA", che è lo NSStoreUUID del file di archivio permanente.

Inoltre, addPersistentStoreWithType:... non riuscirebbe se gli hash di versione dell'archivio caricato sono diversi dagli hash nel modello.

La modifica delle regole di cancellazione non dovrebbe pertanto costituire un problema.

+0

Questo è esattamente quello che ho vissuto - hash identici. Ero solo un fermento, perché nel doc apple ho trovato che il deleteRules dovrebbe essere rilevante però: [...] Per ogni proprietà in ogni entità, i seguenti attributi devono essere uguali: nome, isOptional, isTransient, isReadOnly, per attributi attributeType e per le relazioni destinationEntity, minCount, maxCount, deleteRule e inverseRelationship [...]! Quindi non dovresti creare una nuova versione per il cambiamento? Non vedo alcun vantaggio di uno nuovo ... – Alexander

+0

@Alexander: Devo ammettere che non ho cercato la documentazione (puoi darmi la posizione?), L'ho appena testato come descritto. E hai testato che 'addPersistentStoreWithType:' funziona, quindi non vedo alcun problema. –

+0

Qui vai (Pagina 8 in fondo): https://developer.apple.com/library/mac/documentation//Cocoa/Conceptual/CoreDataVersioning/CoreDataVersioning.pdf – Alexander