2010-06-12 5 views
0

J'ai une entité de données de base qui a trois propriétés startDate, endDate et duration. Les trois propriétés sont des propriétés persistantes. Je voudrais savoir comment je peux calculer et mettre à jour la propriété de durée chaque fois que la valeur pour startDate et endDate change?Valeur de la propriété de modification des données de base lorsqu'une autre propriété est modifiée

BTW, je ne serai pas en mesure de faire la durée en tant que propriété transitoire puisque je dois utiliser la propriété pour le tri dans ma vue de table?

Toute aide est grandement appréciée

Merci, Javid

Répondre

0

Si vous ne l'avez pas déjà fait, vous devez laisser Xcode générer la classe d'objets gérés pour votre entité. Si vous jetez un coup d'oeil au fichier .m, vos propriétés sont toutes déclarées comme @dynamic. Cela signifie que toutes les méthodes d'accès que vous ne déclarez pas seront générées dynamiquement.

Vous pouvez maintenant déclarer des paramètres personnalisés pour startDate et endDate, tout en continuant à utiliser les méthodes dynamiques "get" et "primitive". Les méthodes primitives sont ce que les données de base utilisent "sous le capot", mais maintenant vous aurez besoin de les appeler aussi:

- (void)setStartDate:(NSDate *)newStartDate 
{ 
    // This part replicates what a dynamic setter would do 
    [self willChangeValueForKey:@"startDate"]; 
    [self setPrimitiveStartDate:newStartDate]; 
    [self didChangeValueForKey:@"startDate"]; 

    // Now, calculate your new duration 
    calculatedDuration = ... 

    // Set the duration property 
    self.duration = calculatedDuration; 

} 
0

Deux options:

  • remplacent les setters et la cause de la durée de mise à jour lorsque les autres setters sont appelés;

  • utiliser KVO pour être informé des changements et mettre à jour la durée alors.

La meilleure solution dépend de la conception de votre application.

Questions connexes