我有一个核心数据实体,我们称之为“记录”,我需要使用其他对象/实体的数据设置几个属性(以及设置关系)。
假设“记录”具有以下属性:
@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方法。
我的问题是:在创建时设置其他值和关系的最佳做法是什么?我能想到的唯一可行的方法就是创建实例然后设置所有属性,但是有更好的方法可以做到这一点吗?我传入的附加值/对象是参数,并在创建时设置属性/关系?
答案 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。布尔值应该通过键入布尔值。使用YES
和NO
或@YES
和@NO
代替1和0。
输入Safari。