我添加了一个类来我NSManagedObject IBCompany
,应检索特定的时间段,这是IBCompany的关系之一,基于一个简单的日期比较时。核心数据:奇怪的断裂行为使用延迟实例
当我运行下面的代码中,NSArray的sortedFinPeriodsDesc
包含正确的排序顺序发生故障的时间。但是,在for each
循环中访问它们时,每个期间的属性返回nil,特别是nil为EndDate。为此,我的方法lastReportedPeriodforDate
总是返回nil,这是一个错误。
#import "IBCompany+FinstatAccessors.h"
@implementation IBCompany (FinstatAccessors)
NSArray *sortedFinPeriodsDesc;
- (IBFinPeriod*)lastReportedPeriodforDate:(NSDate*)date;
{
if (!sortedFinPeriodsDesc) {
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"EndDate" ascending:NO];
sortedFinPeriodsDesc = [self.finperiod sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
}
IBFinPeriod *lastPeriod;
for (IBFinPeriod *finPeriod in sortedFinPeriodsDesc) {
if ([finPeriod.EndDate compare:date] == NSOrderedAscending){ // finPeriod.EndDate < date
lastPeriod = finPeriod;
break;
}
}
return lastPeriod;
}
然而,通过除去if clause
和总是实例化和分选的NSArray sortedFinPeriodsDesc
替换的方法中的第一线(延迟实例)的情况下,代码工作正常。
因此,我有几个问题:
- 什么是我的代码中的错误?如何影响延迟实例化 错误?
- 你会推荐定义的NSArray
sortedFinPeriodsDesc
为瞬态属性和awakeFromFetch
代替排序呢? - 你认为最好的选择是什么?
非常感谢您的帮助!
可能是将数组中的NSManagedObject转换为IBFinPeriod类的问题。再次检查awakefrominsert等。 – 2012-07-24 09:35:10
该数组是否真的在实现部分中定义为“浮动”? – jrturton 2012-07-24 09:53:13
Vaibhav,我还没有使用awakeFromInsert。我只使用上面提到的问题中提供的代码。 Jrturton,你是什么意思“漂流”? – AlexR 2012-07-24 12:01:15