2016-03-06 1 views
2

Débutant dans les données de base ici, il y a quelque chose de fondamental dans les données de base que je ne comprends pas. Je connais les règles de suppression, telles que si mon objet est supprimé, s'il a des relations en cascade par exemple, ces relations seront également supprimées. Mais que se passe-t-il sur les mises àDonnées de base appliquant la règle de suppression lors de la mise à jour

Exemple: Une personne a une relation avec une voiture. La règle d'effacement est en cascade. Personne -> Voiture Si la personne est supprimée, la voiture sera partie aussi. Mais maintenant, si la personne pointe juste vers une autre voiture, la voiture précédente ne sera pas supprimée et sera simplement suspendue dans la base de données. Des solutions à cela?

Je pensais idéalement que vous deviez supprimer la première voiture avant de configurer la nouvelle, mais cela se fait automatiquement à partir d'une récupération de serveur.

+0

Ce que je fais dans des situations similaires est de récupérer des objets abandonnés après la mise à jour, et de les supprimer. Les suppressions en cascade sont destinées à faciliter votre travail, lorsqu'elles s'appliquent, mais comme vous l'avez découvert, elles se déclenchent uniquement lors des suppressions. – Avi

Répondre

1

Si tel est le comportement que vous souhaitez dans tous les cas, vous pouvez remplacer la méthode de la sous-classe d'objet géré pour définir la nouvelle relation. Dans la méthode, vérifiez d'abord si un autre objet existe et supprimez-le si vous le souhaitez.

E.g.

-(void) setCar:(Car *)car { 
    if (Car* oldCar = self.car) { 
     [self.managedObjectContext deleteObject:oldCar]; 
    } 
    [self willChangeValueForKey:@"car"]; 
    [self setPrimitiveValue:car forKey:@"car"]; 
    [self didChangeValueForKey:@"car"]; 
}