2011-12-03 14 views
1

私は年値(int 16)と他のいくつかの値を保持する一種の "マスター"エンティティを持つコアデータプロジェクトを持っています。この1つのマスターと多対1の関係を持つ他の「子」エンティティがいくつかあります。これらの他のエンティティの1つでは、開始日と終了日の2つのデフォルト値を設定したいと考えています。デフォルト値は、マスタエンティティに割り当てられた年の開始日と終了日である必要があります。だから私はこれを使用しました:私はこれを実行するとコアデータvalueForKeyPathは0を返します

- (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なってしまう、マスターの「年」の値は、属性が、私は「int型currentYear = 2011」を設定しようとした2011年であってもコードが期待通りに機能するので、問題は最初の行にあるようです。奇妙なことは、NSManagedObjectのマスターエンティティのサブクラス内で、私のような行持っている:

float total = [[self valueForKeyPath: @"[email protected]"] floatValue]; 

を、これは常に正しい金額を返します。私は違いが何であるか分かりません。誰にでもできますか?

答えて

1

メソッドが呼び出された時点でマスターが設定されていますか?また、awakeFromInsertドキュメントは、[super awakeFromInsert]を最初に呼び出す必要があることを示しています。

+0

[super awakeFromInsert]を呼び出しても何も変更されていないようです。また、子オブジェクトはボタンをクリックすることによって追加および削除され、追加および削除ボタンがバインドされるNSArrayControllerは内容がmaster.selection.childに設定されているため、awakeFromInsert呼び出しが行われたときにマスターが存在する必要があります。 – LighteningKid

+0

それは本当ですか? '' '[self valueForKeyPath:@" master "]' ''をログに記録するとどうなりますか? '' '[self valueForKeyPath:@" master.year "]' ''はどうでしょうか? –

+0

まあ、あなたは正しいかもしれないが、私はまだ理解していない。ログは私に 2011-12-03 18:00:24.860 MyProg [1565:707] master =(null) 2011-12-03 18:00:26.024 MyProg [1565:707] master.year =(null) ) しかし、追加ボタンは、子配列コントローラの "canAdd"にバインドされています。私が言ったように、配列コントローラはmaster.selection.childにバインドされています。だから、 "canAdd"はマスターに選択があるまで真実ではない。つまり、その時点でmaster.yearが存在するということだ...私はとても混乱している。 – LighteningKid

関連する問題