6

我有一个NSManagedObject要覆盖 setter 的类,但有人告诉我最好不要修改自动生成的类文件并创建类别来扩展它们(因为如果您更改模型并重新生成文件,你失去了所有的加法)。

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

@synthesize finished = _finished;

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

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

但是在NSManagedObjectthis 中定义属性的地方似乎是不可能的。

4

3 回答 3

8

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

- (void)setName:(NSString *)newName
{
    [self willChangeValueForKey:@"name"];
    [self setPrimitiveName:newName];
    [self didChangeValueForKey:@"name"];
}
于 2012-10-29T11:08:28.050 回答
1

在一个类别中,您不能添加属性值,只能添加方法。所以你需要子类来执行你想要的。

于 2012-10-29T10:46:19.927 回答
0

有一个简单的方法可以做到这一点,请尝试以下方法:

模型.h

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

模型+覆盖.m

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

@implementation Model (Override) 
- (void)setString:(NSString *)string
{
    return _string = string;
}    
@end
于 2016-08-18T09:23:13.910 回答