覆盖类类别中的属性设置器

时间:2012-10-29 10:17:45

标签: objective-c ios

我有一个NSManagedObject类,我想覆盖一个setter但是我被告知最好不修改自动生成的类文件并创建类别来代替扩展它们(因为如果你更改模型并重新生成文件,您将失去所有添加项。)

如果我在类别中为setter创建一个方法,它肯定会运行该方法(使用NSLog测试),但我不知道如何分配实际的属性值。通常,我会使用

合成属性

@synthesize finished = _finished;

这样我就可以使用_finished访问setter中的属性,如下所示:

- (void)setFinished:(NSNumber *)finishedValue {
    _finished = finishedValue;
    self.end_time = [NSDate date];
}

但是在NSManagedObject中定义了属性,这似乎不可能。

3 个答案:

答案 0 :(得分:8)

您可以使用子类化查看文档here

- (void)setName:(NSString *)newName
{
    [self willChangeValueForKey:@"name"];
    [self setPrimitiveName:newName];
    [self didChangeValueForKey:@"name"];
}

答案 1 :(得分:1)

在某个类别中,您无法添加属性值,只能添加方法。因此,您需要使用subClass才能执行所需的操作。

答案 2 :(得分:0)

有一种简单的方法,请尝试以下方法:

Model.h

@interface Model
@property(nonatomic,copy) NSString  * string;
@end

Model + Override.m

@interface Model ()
{
    NSString *_string;
} 
@end

@implementation Model (Override) 
- (void)setString:(NSString *)string
{
    return _string = string;
}    
@end