我有一个Core Data项目,其中包含一个“master”实体,它包含年份值(int 16)和一些其他值。还有一些其他“子”实体与这一个主人具有多对一关系。在其中一个其他实体中,我想设置几个默认值,即开始日期和结束日期。默认值应该是分配给主实体的年份的开始和结束。所以我用过这个:
- (void) awakeFromInsert {
int currentYear = [[self valueForKeyPath: @"master.year"] intValue];
NSString *currentYearStart = [NSString stringWithFormat: @"%d-01-01 00:00:01 +0000", currentYear];
NSString *currentYearEnd = [NSString stringWithFormat: @"%d-12-31 23:59:59 +0000", currentYear];
[self setStartDate: [NSDate dateWithString: currentYearStart]];
[self setEndDate: [NSDate dateWithString: currentYearEnd]];
}
当我运行它时,currentYear总是最终为0,即使master的“year”属性的值是2011.我已经尝试设置“int currentYear = 2011”然后代码按预期工作,所以问题似乎是在第一行。奇怪的是,在主实体的NSManagedObject的子类中,我有像:
这样的行float total = [[self valueForKeyPath: @"child.@sum.amount"] floatValue];
,这总是返回正确的金额。我不明白有什么区别。还有其他人吗?
答案 0 :(得分:1)
您确定在调用方法时设置了master吗?此外,awakeFromInsert文档表明您必须先调用[super awakeFromInsert]
。