2011-02-23 2 views
0

J'ai un nsmanagedObject ce NSManagedObject contient un NSSet.NSManagedObject - NSSet est supprimé?

les données pour obtenir NSSet est perdu quand je .L'appel sur un NSManagedObject avec retenue nombre de 2.

Ne serait-en conservant un NSManagedObject conservent également toutes ses propriétés ??

- (id)initViewWithManagedObject :(NSManagedObject)obj 
{ 
    if (self = [super init]) 
    { 
      self.managedObject = obj; 
    } 
    return self; 
} 

- (void)dealloc 
{ 
    self.managedObject = nil; 
    //Here is when the nsset data gets removed 

    [super dealloc]; 
} 

décrit ci-dessous comment la propriété a été créé

@interface MyManagedObject :NSManagedObject 
@property (nonatomic, retain) NSSet *mySet; 
@end 

@implementation MyManagedObject 
@dynamic mySet; 
@end 

Répondre

-2

Voici la solution au problème: J'ai dû créer une relation bidirectionnelle de l'objet a à b et de l'objet b à a. Par exemple:

CountryManagedObject *country = [Factory getCountryByName:@"USA"]; 
StateManagedObject *state = [Factory createStateByName:@"California"]; 
[country.statesSet addObject:state]; //assuming NSSet responds to addObject 
//the line below fixed the problem 
//State has a reversed relationship to country named "country" 
state.country = country; 
+1

En supposant que les données de base et vos setters sont correctement configurés, vous ne devriez jamais avoir à définir manuellement la relation de réciprocité - les données de base le font automatiquement pour vous. –

4

Pourquoi appelez-vous [self.managedObject release]? Vous devez jamais appeler -release sur les résultats de l'appel d'un getter. Le code approprié ici est simplement [managedObject release] (en supposant que managedObject est le nom de l'ivar de support).

De plus, une fois que vous avez libéré l'objet, pourquoi inspectez-vous ses propriétés?

+0

Merci, mais cela ne résout pas le problème – aryaxt

+0

Votre problème d'origine repose sur l'inspection du contenu d'une propriété d'un objet après avoir sorti l'objet. Pouvez-vous répéter votre problème de telle sorte que cela n'arrive pas? –

+0

Ceci est un objet de données de base (NSManagedObject), Quand je dis que les données de NSSet sont perdues, je veux dire de façon permanente, donc la prochaine fois que je fais une extraction et récupère le même objet, le NSSet est vide. Le moyen de se débarrasser de la perte est de ne pas libérer le NSMAnagedObject dans la méthode dealloc qui provoque une fuite. – aryaxt

1

Est-il sûr de supposer que votre application obtient un NSSet que vous voulez être une relation de données de base?

Dans le cas, le problème n'est pas de relâcher et de conserver. Le problème est que vous ne sauvegardez pas le contexte de l'objet géré avant d'en avoir terminé avec l'objet. Ainsi, lorsque vous récupérez, les données sont perdues.

Questions connexes