/ / CoreData: comment définir correctement les attributs d'entité créés - ios, objectif-c, données de base, relation d'entité, valeur d'attribut d'entité

CoreData: Comment définir correctement les attributs d'entité créés - ios, objective-c, core-data, entité-relation, entité-attribut-valeur

J'ai une entité de données principale, appelons-la "enregistrement" et plusieurs attributs que je dois définir avec les données d'autres objets / entités (ainsi que la configuration de relations).

Disons "Record" a les attributs suivants:

@interface Record (CoreDataProperties)

+ (NSFetchRequest<Record *> *)fetchRequest;

@property (nullable, nonatomic, copy) NSNumber *superRecordID;
@property (nullable, nonatomic, copy) NSNumber *otherDataID;
@property (nullable, nonatomic, copy) NSNumber *active;
@property (nullable, nonatomic, copy) NSDate *createDate;
@property (nullable, nonatomic, copy) NSDate *updateDate;
@property (nullable, nonatomic, copy) NSString *uuid;
@property (nullable, nonatomic, retain) SuperRecord *superRecord;

@end

Je sais que pour les éléments actifs, je peux définir la valeur par défaut de 1 pour XCode et pour les éléments tels que createDate, updateDate et uuid, je peux remplacer la méthode awakeFromInsert.

Ma question est: Quelle est la meilleure pratique pour définir les autres valeurs et relations lors de la création? La seule façon de penser que je sais qui devrait fonctionner est de créer l'instance ALORS définir tous les attributs, mais existe-t-il une meilleure façon de le faire? Où je passe dans les valeurs / objets supplémentaires sont des paramètres et définir les attributs / relations lors de la création?

Réponses:

1 pour la réponse № 1

Écrivez simplement un allocateur de commodité comme ceci:

- (instancetype)initWithSuperRecord:(SuperRecord*)superRecord active:(BOOL)active … context:(NSManagdObjectContext*)context
{
self = [super initWithEntity:… /* in subclasses you typically know that */
insertIntoManagedObjectContext:context];
if( self )
{
// Set the properties you get from the args
}
return self;
}

+ (instancetype)newWithSuperRecord:(SuperRecord*)superRecord active:(BOOL)active … context:(NSManagdObjectContext*)context
{
return [[self alloc] initWithSuperRecord:superRecord … context:context];
}

Quelques suggestions: Le superID semble être une propriété du super enregistrement. Ne le stockez pas deux fois. De plus, vous devez vérifier si vous avez besoin d’un identifiant. Ce n’est pas OOPish. Les valeurs booléennes doivent être saisies en valeurs booléennes. YES et NO ou @YES et @NO au lieu de 1 et 0.

Dactylographié dans Safari.