NSManagedObject IBCompany
単純な日付比較に基づいて、IBCompany の関係の 1 つである特定の期間を取得するカテゴリを my に追加しました。
次のコードを実行すると、NSArraysortedFinPeriodsDesc
には障害が発生した期間が正しい順序で格納されます。ただし、for each
ループ内でそれらにアクセスすると、各ピリオドは属性に対して nil を返し、特に EndDate に対して nil を返します。このため、私のメソッド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
代わりにソートすることをお勧めしますか? - あなたの考えでは、何が最良の選択肢でしょうか?
ご助力ありがとうございます!