3

因此,在常规类中,您可以覆盖类属性的 setter 方法:

-(void)setSortBy:(NSString *)sortBy {
    // Do other stuff

    _sortBy = sortBy;
}

使用_防止调用自身的方法的无限循环。

我正在尝试对一个NSManagedObject类做类似的事情,但它没有提供使用下划线 (_) 的选项:

-(void)setHasNewData:(NSNumber *)hasNewData {
    // update self.modifiyDate

    _hasNewData = hasNewData;
}

给我一个错误并建议我替换_hasNewDatahasNewData.

这是应该怎么做还是会给我一个无限循环?

我希望它在我设置的任何时候更新NSManagedObject's 属性。modifyDatehasNewData

4

1 回答 1

7

_sortBy如果是 备份属性的实例变量sortBy(例如,该属性的默认合成实例变量),则“常规类”的第一个示例有效。

但是 Core Data 属性没有实例变量支持。覆盖 Core Data 访问器时,您必须使用“原始访问器”,并触发 Key-Value Observing 通知:

-(void)setHasNewData:(NSNumber *)hasNewData {
    [self willChangeValueForKey:@"hasNewData"];
    [self setPrimitiveValue:hasNewData forKey:@"hasNewData"];
    [self didChangeValueForKey:@"hasNewData"];

    // do other things, e.g.
    self.modifyDate = ...;
}

更多示例可以在“Core Data Programming Guide”中找到。

于 2013-07-30T19:28:26.597 回答