Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 重写类类别中的属性设置器_Objective C_Ios - Fatal编程技术网

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