2010-09-22 5 views

Répondre

34

Vous pouvez utiliser « maintenant » dans le modèle, mais de base de données qui évalue au moment de la compilation, pas l'exécution. Vous aurez la date de compilation stockée dans vos paramètres par défaut du modèle, ce qui est sans doute pas ce que vous voulez:

http://iphonedevelopment.blogspot.com/2009/07/core-data-default-dates-in-data-model.html

Le moyen le plus fiable pour assurer une valeur de propriété par défaut de la date actuelle est de passer outre -awakeFromInsert dans une sous-classe NSManagedObject et attribuez-y la date actuelle.

- (void) awakeFromInsert 
{ 
    [super awakeFromInsert]; 
    self.date = [NSDate date]; 
    // or [self setPrimitiveDate:[NSDate date]]; 
    // to avoid triggering KVO notifications 

} 

Note: Si vous faites usage de contextes d'objets gérés imbriqués (ou UIManagedDocument), ce qui précède ne fonctionnera pas comme prévu. Ce conseil s'applique uniquement lors de l'utilisation de contextes d'objets gérés uniques.

+2

Ce n'est pas correct car awakeForInsert sera appelé chaque fois qu'un objet NSManagedObject sera créé. NSManagedObject différent peut être créé dans différents threads alors qu'ils représentent la même entité CoreData. – Kamchatka

+0

La création d'un objet géré dans deux threads différents représentant la même entité enfreindrait les lois de la physique des données de base. Et certainement être un indicateur d'une erreur de logique de l'application. Faire quelque chose comme ça n'est pas une pratique recommandée. –

+0

Je crois que vous pouvez. Voici un cas d'utilisation équitable: vous pouvez certainement avoir un objet Core Data sur le thread principal pour l'affichage (disons un objet "Photo"), puis avoir un thread de travail en arrière-plan chargeant le même objet de la base de données, en appliquant traitement d'image, en sauvegardant la photo dans le magasin persistant. À ce stade, vous obtenez une notification de modification globale et le thread principal peut décider de fusionner les modifications dans le contexte d'objet géré de thread principal. – Kamchatka

Questions connexes