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

时间:2017-09-11 16:31:43

标签: ios objective-c core-data entity-relationship entity-attribute-value

我有一个核心数据实体,我们称之为“记录”,我需要使用其他对象/实体的数据设置几个属性(以及设置关系)。

假设“记录”具有以下属性:

@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

我知道像活动这样的东西,我可以从XCode将默认设置为1,对于诸如createDate,updateDate和uuid之类的东西,我可以覆盖awakeFromInsert方法。

我的问题是:在创建时设置其他值和关系的最佳做法是什么?我能想到的唯一可行的方法就是创建实例然后设置所有属性,但是有更好的方法可以做到这一点吗?我传入的附加值/对象是参数,并在创建时设置属性/关系?

1 个答案:

答案 0 :(得分:1)

只需编写一个这样的便利分配器:

- (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似乎是超级记录的属性。不要存放两次。此外,你应该检查,你是否需要一个ID。这不是OOPish。布尔值应该通过键入布尔值。使用YESNO@YES@NO代替1和0。

输入Safari。