2009-08-24 8 views
0

J'ai une entité CoreData (waypoint) avec une clé étrangère à une autre entité (piste). Quand est réglé la clé étrangère, ou si elle est pas définie, cette instruction if fonctionne très bien:CoreData: Vérification de Null

if ([wp track]) { 
    thirdLabel.text = [NSString stringWithFormat:@"Part of Track: %@", [[wp track] title]]; 
} 

Cependant, si la piste que le point de passage est calée sur a été supprimé, puis [piste wp] évalue encore true, et le programme se bloque lorsque je définis le texte de l'étiquette. Alors, comment puis-je vérifier correctement cette valeur null "a été supprimé" dans CoreData?

Répondre

6

Il semble que vous ayez un problème avec une relation unidirectionnelle. Le problème que vous décrivez est décrit plus en détail sous here sous "Relations unidirectionnelles"

Fondamentalement, votre waypoint n'a aucun moyen de savoir que la piste a été supprimée. La solution recommandée consiste à modéliser la relation pour qu'elle soit bidirectionnelle, ce qui permet aux données essentielles de maintenir la cohérence dans votre modèle. Dans votre exemple spécifique, si votre objet 'track' a une relation inverse avec le 'waypoint', alors lorsque vous supprimez l'objet 'track', Core Data saura mettre à jour le waypoint pour se débarrasser de toute balançoire des relations. Plus à ce sujet peut également être vu sur le lien ci-dessus.

0

Il est possible que Objective-C envoie des messages à nil. Vous aurez besoin de modifier votre si prédicat à lire:

if (wp != nil && [wp track]) { 
    //... 
} 

Vous pouvez également vérifier la retainCount d'un objet, ce qui pourrait retourner 0 ou accident dans le cas où l'objet a été désallouée.

Dans les deux cas, il pourrait être préférable d'envoyer une sorte de notification de quiconque détruit wp à ceux intéressés à l'utiliser, ou au moins conserver wp jusqu'à ce que vous avez terminé dans ce code.

+1

Cela ne change pas le comportement actuel, car l'envoi d'un message à nil renvoie zéro, ce qui ferait échouer la condition 'if'. – bobDevil

Questions connexes