2010-10-19 33 views
2

La documentation Core Data indique que les objets peuvent être défectueux pour économiser de la mémoire si nécessaire. Que se passe-t-il si vous avez un objet qui a une propriété qui n'est pas une propriété gérée? Par exemple, supposons que vous ayez une classe Department, c'est-à-dire une sous-classe de NSManagedObject. Par exemple, disons que vous avez une classe Department, c'est-à-dire une sous-classe de NSManagedObject. Il a un emplacement iVar + accesseurs. La propriété location n'est pas un attribut de Department; il n'est pas géré et n'a jamais persisté.Un objet géré avec des propriétés non gérées peut-il être défaillant?

Si vous disposez d'un tableau d'objets Department ou d'un objet Employee avec une relation un à un avec Department, est-il possible que le département ait jamais commis une faute? Si vous définissez Department.location, pouvez-vous être sûr que l'emplacement sera toujours là, ou est-il possible que le département commette une erreur, et alors vous aurez perdu la valeur stockée dans l'emplacement?

Répondre

1

Il est toujours possible que le Département soit en faute, il ne fera que réparer les propriétés que vous avez décrites dans votre modèle. Généralement, la situation que vous décrivez est couverte par des propriétés "transitoires", qui ne sont pas stockées dans CoreData, mais le modèle objet en est conscient. Lorsque vous implémentez une propriété transitoire, vous fournissez le stockage (ou le calcul) requis pour fournir la valeur de cette propriété.

Dans votre cas, il est parfaitement légitime de supposer que votre valeur de "localisation" ne sera plus là dans le futur, car elle ne survivra que tant que l'objet géré réel restera en mémoire. En d'autres termes, toute action entraînant la libération de l'objet géré, telle qu'une réinitialisation de contexte, une sauvegarde ou une mise à jour à partir d'une notification de sauvegarde peut entraîner la perte de la valeur (l'objet géré auquel elle est liée est transformé en défaut ou invalidé).

1

Je ne ferais pas confiance aux données non gérées pour y rester. Même si c'est le cas maintenant, le comportement peut changer à l'avenir. Plus encore, du point de vue architectural, je ne recommanderais pas du tout de garder des données non gérées dans l'objet géré. Vous êtes mieux:

  1. Rendre géré les données OU
  2. Faire les données non géré calculable à partir des données gérées, OU
  3. Faire un objet qui a les données non gérés et le ministère comme Ivars.
+0

En utilisant 2. ci-dessus, j'ai utilisé des propriétés transitoires pour stocker les valeurs de localisation; semble fonctionner. Quelqu'un a utilisé une approche différente? – petert