我需要在我的 NSManagedObject
子类中为一个字段(我们称之为 foo
)编写一个自定义的 setter 方法。 foo
在数据模型中定义,Xcode 分别在 .h 和 .m 文件中自动生成了 @property
和 @dynamic
字段。
如果我这样写我的 setter :
- (void)setFoo: (NSObject *)inFoo {
[super setFoo: inFoo];
[self updateStuff];
}
然后我在调用 super
时收到编译器警告。
或者,如果我这样做:
- (void)setFoo: (NSObject *)inFoo {
[super setValue: inFoo forKey: inFoo];
[self updateStuff];
}
然后我会陷入无限循环。
那么为 NSManagedObject 的子类编写自定义 setter 的正确方法是什么?
最佳答案
根据the documentation ,应该是:
- (void) setFoo:(NSObject *)inFoo {
[self willChangeValueForKey:@"foo"];
[self setPrimitiveValue:inFoo forKey:@"foo"];
[self didChangeValueForKey:@"foo"];
}
当然,这忽略了 NSManagedObjects
只想要 NSNumbers
、NSDates
、NSDatas
的事实,和 NSStrings
作为属性。
但是,这可能不是最好的方法。既然您希望在 foo
属性的值发生变化时发生一些事情,为什么不直接用 Key Value Observing 观察它呢? ?在这种情况下,这听起来像是“KVO 的必经之路”。
关于objective-c - Core-Data 中的自定义设置方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2971806/