因此,在常规类中,您可以覆盖类属性的setter方法:
-(void)setSortBy:(NSString *)sortBy {
// Do other stuff
_sortBy = sortBy;
}
使用_
可以防止方法的无限循环调用它自己。
我正在尝试使用NSManagedObject
类做类似的事情,但它没有提供使用下划线(_)的选项:
-(void)setHasNewData:(NSNumber *)hasNewData {
// update self.modifiyDate
_hasNewData = hasNewData;
}
给我一个错误,并建议我将_hasNewData
替换为hasNewData
。
这是应该如何完成的,还是会给我一个无限循环?
我希望在我设置NSManagedObject
的任何时候更新modifyDate
的属性hasNewData
。
答案 0 :(得分:7)
如果_sortBy
是实例变量,那么“常规课程”的第一个示例有效
备份sortBy
属性(例如,默认的合成实例变量)
那个属性)。
但核心数据属性不是由实例变量备份的。 覆盖核心数据访问器时,必须使用“原始访问器”, 并触发键值观察通知:
-(void)setHasNewData:(NSNumber *)hasNewData {
[self willChangeValueForKey:@"hasNewData"];
[self setPrimitiveValue:hasNewData forKey:@"hasNewData"];
[self didChangeValueForKey:@"hasNewData"];
// do other things, e.g.
self.modifyDate = ...;
}
更多示例可以在“核心数据编程指南”中找到。