CoreData:如何正确设置创建的实体属性

CoreData: How to properly set created entity attributes

我有一个核心数据实体,我们称它为 "Record",我有几个属性需要使用来自其他 objects/entities 的数据进行设置(以及建立关系)。

假设 "Record" 具有以下属性:

@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

我知道对于诸如 active 之类的东西,我可以将 XCode 中的默认值设置为 1,对于诸如 createDate、updateDate 和 uuid 之类的东西,我可以覆盖 awakeFromInsert 方法。

我的问题是:在创建时设置其他值和关系的最佳做法是什么?我能想到的我知道应该工作的唯一方法是创建实例然后设置所有属性,但是有没有更好的方法可以做到这一点?我在哪里传递额外的 values/objects 参数并在创建时设置 attributes/relationships?

像这样简单地编写一个方便的分配器:

- (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];
}

一些建议:superID好像是super记录的一个属性。不要存储它两次。此外,您应该检查一下您是否需要身份证件。这不是面向对象的。布尔值应键入为布尔值。使用 YESNO@YES@NO 而不是 1 和 0。

在 Safari 中输入。