一般的に言えば... NSManagedObject クラスでは、特定のフロート動的プロパティのセッターの 1 つ内で、そのセッター内の同じ NSManagedObject の他のフロート動的プロパティにドット構文ゲッターを使用しても問題ありませんか? または、KVC 準拠の CoreData アクセサーを使用する必要がありますか?アクセスされている値の実際のゲッターとは異なるメソッドからのものであっても、値にアクセスするときは? この方法でドット構文を呼び出すと、他のカスタム アクセサーが起動すると思いますが、その中には適切な KVC プリミティブ アクセサーがあるため、これは問題ありません。しかし、ドット構文が単に失敗するか、予測できない結果をもたらすように見えるという奇妙な問題に遭遇したようです。ドット構文を安全でない方法で使用しているという事実が原因であるかどうかはわかりません、またはまだ把握していない他のバグがある場合。
これが私が話していることのコードサンプルです:
- (void)illTakeYouToTheWoodshed {
float h = self.SSx.floatValue/self.yourMomsCurrentWeightInTons.floatValue;
[self willChangeValueForKey:@"SSy"];
[self setPrimitiveValue:@(h) forKey:@"SSy"];
[self didChangeValueForKey:@"SSy"];
[self diagonal]; //makes sure nd gets set
}
- (void)setSSx:(NSNumber *)value{
[self willChangeValueForKey:@"SSx"];
[self setPrimitiveValue:value forKey:@"SSx"];
[self didChangeValueForKey:@"SSx"];
if(self.WorH==syanara || self.WorH == dude_wtf) {
if(self.SSy.floatValue != 0.0) {
[self doThatFunkyDance];
[self diagonal];
} else if (self.youBetcha.floatValue != 0.0) {
[self whatTheFrakDoesThisEvenDo];
}
} else if (self.WorH==fooBarTastic) {
if(self.yourMomsCurrentWeightInTons.floatValue != 0.0) {
[self illTakeYouToTheWoodshed];
}
} else {
NSLog(@"Escaped with salad not having been tossed.");
}
}