CoreData を使用するプロジェクトがあります。サブクラスの生成には Mogenerator を使用します。
プロパティの値を設定すると、この値は実際には割り当てられません。その後、値を設定しようとするたびに、以前に設定した値が割り当てられませんでした。
私の基礎となるデータフレームワークはMantleだったので、これはうまくいきましたが、CoreDataに移行して以来、これは機能しなくなりました。一部の UIView オブジェクトをモデルで最新の状態に保つために、KVO に依存しています。
繰り返しになりますが、CoreData NSManagedObject サブクラスの ivar は、私が割り当てた値を取得していないようです。
次のインターフェースを検討してください。
@interface Light : _Light{}
/**
Light / Color Properties
*/
@property (nonatomic, assign) CGFloat brightness; // 0...1
@property (nonatomic, assign) CGFloat hue; // 0...1
@property (nonatomic, assign) CGFloat saturation; // 0...1
@property (nonatomic, assign, getter = isEnabled) BOOL enabled;
@property (nonatomic, readonly) UIColor *color; // derived from the above
- (void)setHue:(CGFloat)hue saturation:(CGFloat)saturation; // it often makes sense to set these together to generate fewer KVO on the color property.
@end
および次の .m ファイル:
@interface Light ()
{
CGFloat _hue, _saturation, _brightness;
UIColor *_color;
}
@property (nonatomic, assign) BOOL suppressColorKVO;
@property (nonatomic, readwrite) UIColor *color;
@end
@implementation Light
@synthesize suppressColorKVO = _suppressColorKVO;
- (void)setHue:(CGFloat)hue saturation:(CGFloat)saturation
{
BOOL dirty = NO;
if (saturation != _saturation) {
// clamp its value
[self willChangeValueForKey:@"saturation"];
_saturation = MIN(MAX(saturation, 0.0f), 1.0f);
[self didChangeValueForKey:@"saturation"];
dirty = YES;
}
if (hue != _hue) {
[self willChangeValueForKey:@"hue"];
_hue = MIN(MAX(hue, 0.0f), 1.0f);
[self didChangeValueForKey:@"hue"];
dirty = YES;
}
if (dirty) {
if (!_suppressColorKVO) {
[self setColor: self.color];
}
}
}
// other stuff... the color accessors are also custom. Derived from the h, s, b values.
@end
私は CoreData をうまく扱っていないと思いますが、何が問題なのかわかりません。これらの色相、彩度、明るさはすべて「一時的」です (コア データの意味ではありません)。これは、インターフェイスしているハードウェアによって常に更新されているため、状態を保存する必要がないためです。