La documentation d'Apple est un excellent exemple qui suggèrent une situation où vous pourriez avoir des problèmes à ne pas avoir de relation inverse. Permet à la carte dans ce cas.
Supposons que vous modélisé comme suit
Remarque vous avez à une relation appelée "type", à partir de SocialApp à SocialAppType. La relation est non-facultatif et a un "refuser" la suppression de la règle.
Maintenant Permet d'envisager la suite de Code.
SocialApp *socialApp;
SocialAppType *appType;
// assume entity instances correctly instantiated
[socialApp setSocialAppType:appType];
[managedObjectContext deleteObject:appType];
BOOL saved = [managedObjectContext save:&error];
Ce que nous attendons est l'échec de ce contexte enregistrer depuis que nous avons mis la suppression de la règle de Nier alors que la relation est non facultatif.
Mais ici, l'enregistrer réussit.
La raison est que nous n'avons pas défini une relation inverse. En raison de cette socialApp instance obtenez pas marqué comme modifié lorsque appType est supprimé. Donc pas de validation qui se passe pour socialApp avant de les enregistrer (Il n'assume aucune validation nécessaire, car aucune modification n'est intervenue). Mais en réalité, un changement s'est produit. Mais il n'est pas pris en compte.
si nous nous rappelons appType par
SocialAppType *appType = [socialApp socialAppType];
appType est nul.
Tellement bizarre n'est-ce pas. obtenir nulle pour les non attribut facultatif?
Si vous n'êtes pas en difficulté, si vous avez mis en place la relation inverse.
Sinon, vous avez à faire forcer la validation par l'écriture de code comme suit.
SocialApp *socialApp;
SocialAppType *appType;
// assume entity instances correctly instantiated
[socialApp setSocialAppType:appType];
[managedObjectContext deleteObject:appType];
[socialApp setValue:nil forKey:@"socialAppType"]
BOOL saved = [managedObjectContext save:&error];