objective-c - Core-Data 中的自定义设置方法

标签 objective-c core-data setter

我需要在我的 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 只想要 NSNumbersNSDatesNSDatas 的事实,和 NSStrings 作为属性。

但是,这可能不是最好的方法。既然您希望在 foo 属性的值发生变化时发生一些事情,为什么不直接用 Key Value Observing 观察它呢? ?在这种情况下,这听起来像是“KVO 的必经之路”。

关于objective-c - Core-Data 中的自定义设置方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2971806/

相关文章:

objective-c - 如何为 NSAttributedString 内的文本设置 "hidden"属性?

ios - 在导航堆栈中重新创建 viewController

objective-c - SwiftSupport 文件夹丢失。使用当前公共(public) (GM) 版本的 Xcode 重建您的应用程序并重新提交

objective-c - 持久存储的核心数据错误

java - Java 中的 setter 问题 - Internet Bill 程序

objective-c - 压缩巨大的png文件以在iphone游戏中使用

iphone - 在 core-data 中保存 unix timestamp 将其转换为负整数

ios - 如何在 UserDefault 中存储推送通知警报消息?

python - @property 和@value.setter 的使用

java - 数组上出现空异常