2013-01-08 6 views
10

ja nic o migration rules w przypadku zmiany deletion rule o managedObjects relationshipCoreData migracja - usuwanie zasad relacji

My początkowego modelu CoreData zawartej podmiot z relacji znalezione. Reguła usuwania tej relacji to cascade. Musiałem zmienić to zachowanie na Nullify.

Dlatego stworzyłem new version of my coredata model, ale bez żadnych lekkich migracji i nadal działa. Więc jestem ranny, jeśli powinienem był dodać nową wersję mojego modelu lub jeśli zmiana zasad usuwania (np. Z cascade na nullify) nie powoduje/nie wymaga żadnej migracji.

Wszelkie sugestie?

+0

Brak migracji lightweight? Więc nie używasz 'NSMigratePersistentStoresAutomaticallyOption' lub' NSInferMappingModelAutomaticallyOption' podczas dodawania magazynu trwałego? –

+0

Nie używam następujące czynności, aby utworzyć mój sklep: koordynator addPersistentStoreWithType: NSSQLiteStoreType konfigurację : nil URL: storeURL opcje: nil błędu: & błąd] – Alexander

Odpowiedz

16

Reguły usuwania określają zachowanie danych podstawowych w czasie wykonywania: Jeśli jeden obiekt zostanie usunięty, inne relacje mogą mieć wartość NULL lub obiekty powiązane mogą również zostać usunięte.

Dlatego założyłem, że reguły usuwania są przechowywane tylko w modelu danych podstawowych, ale nie w pliku magazynu trwałego.

Aby to sprawdzić, utworzyłem 2 pliki sklepowe z 2 modeli danych podstawowych z identycznymi elementami, ale z innymi regułami usuwania. NSStoreModelVersionHashes w słowniku trwałych przechowuje metadata były identyczne.

W rzeczywistości oba pliki SQLite były identyczne, z wyjątkiem "Z_UUID" w tabeli "Z_METADATA", która jest NSStoreUUID pliku magazynu trwałego.

Również, addPersistentStoreWithType:... nie powiedzie się, jeśli skróty wersji załadowanego sklepu różnią się od skrótów w modelu.

Zmiana zasad usuwania nie powinna stanowić problemu.

+0

To jest dokładnie to, co przeżyłem - identycznych skrótów. Właśnie raniłem, ponieważ w dociku jabłkowym odkryłem, że deleteRules powinny być istotne: [...] Dla każdej właściwości w każdej jednostce następujące atrybuty muszą być równe: name, isOptional, isTransient, isReadOnly, dla atrybutów attributeType, a dla relacji destinationEntity, minCount, maxCount, deleteRule i inverseRelationship [...]! Czy nie stworzysz nowej wersji dla zmiany? Nie widzę żadnej korzyści z nowego ... – Alexander

+0

@Alexander: Muszę przyznać, że nie sprawdziłem dokumentacji (czy możesz podać mi lokalizację?), Właśnie ją przetestowałem zgodnie z opisem. I przetestowałeś, że 'addPersistentStoreWithType:' działa, więc nie widzę problemu. –

+0

Tutaj idź (strona 8 na dole): https://developer.apple.com/library/mac/documentation//Cocoa/Conceptual/CoreDataVersioning/CoreDataVersioning.pdf – Alexander