NSManagedObject类并创建一个Setter方法

时间:2013-07-30 19:09:30

标签: ios objective-c core-data nsmanagedobject

因此,在常规类中,您可以覆盖类属性的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

1 个答案:

答案 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 = ...;
}

更多示例可以在“核心数据编程指南”中找到。