Objective c 重写类类别中的属性设置器
我有一个Objective c 重写类类别中的属性设置器,objective-c,ios,Objective C,Ios,我有一个NSManagedObject类,我想覆盖setter,但有人告诉我,最好不要修改自动生成的类文件,而是创建类别来扩展它们(因为如果更改模型并重新生成文件,就会丢失所有添加的内容) 如果我在一个类别中为setter创建一个方法,它肯定会运行该方法(使用NSLog测试),但我不知道如何分配实际的属性值。通常,我会使用 @synthesis finished=\u finished 这样我就可以使用\u finished访问setter中的属性,如下所示: - (void)setFinish
NSManagedObject
类,我想覆盖setter,但有人告诉我,最好不要修改自动生成的类文件,而是创建类别来扩展它们(因为如果更改模型并重新生成文件,就会丢失所有添加的内容)
如果我在一个类别中为setter创建一个方法,它肯定会运行该方法(使用NSLog测试),但我不知道如何分配实际的属性值。通常,我会使用
@synthesis finished=\u finished代码>
这样我就可以使用\u finished
访问setter中的属性,如下所示:
- (void)setFinished:(NSNumber *)finishedValue {
_finished = finishedValue;
self.end_time = [NSDate date];
}
但是,如果属性是在NSManagedObject
中定义的,这似乎是不可能的。在类别中,您不能添加属性值,只能添加方法。因此,您需要进行子类化,以便执行所需的操作。您可以进行子类化,请参见文档
有一种简单的方法可以做到这一点,请尝试以下方法:
模型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
你会收到一个错误,说你不能在一个类别中进行合成这并不能回答问题,但会以不同的方式让你到达你要去的地方:使用[self-setPrimitiveValue:finished-forKey:@“finished”]
似乎在该类别中起作用,这就是我一直在寻找的,感谢你为我指引了正确的方向你可以,
@interface Model ()
{
NSString *_string;
}
@end
@implementation Model (Override)
- (void)setString:(NSString *)string
{
return _string = string;
}
@end