覆盖具有弧和动态属性的setter

too*_*oom 3 setter overriding core-data ios ios5

我需要在setter方法中做一些额外的事情.但这样做时我得到一个无限循环:

我有一个核心数据对象

@interface Transaction : NSManagedObject 
@property (nonatomic, retain) NSDate * date;
@end

@implementation Transaction
@dynamic date;

-(void)setDate:(NSDate *)date
{
    self.date = date;
    //additional stuff omitted
}
Run Code Online (Sandbox Code Playgroud)

所以,在那种情况下,我得到一个无限循环.好的,所以我在网上搜索并按以下方式修改我的代码,对于每个版本,我都会遇到编译器错误

版本1:

@interface Transaction : NSManagedObject 
@property (nonatomic, retain) NSDate * date;
@end

@implementation Transaction
@dynamic date;

-(void)setDate:(NSDate *)date
{
    self->date = date; //Error: Property 'date' found on object 'Transaction *'; did you mean to access it with the "." operator?
    //additional stuff omitted
}
Run Code Online (Sandbox Code Playgroud)

版本2:

@interface Transaction : NSManagedObject 
@property (nonatomic, retain) NSDate * date;
@end

@implementation Transaction
@dynamic date = _date; //Error: Expected ';' after @dynamic

-(void)setDate:(NSDate *)date
{
    _date = date; 
    //additional stuff omitted
}
Run Code Online (Sandbox Code Playgroud)

现在,我问自己该怎么做?

too*_*oom 5

我的问题的解决方案:

@interface Transaction : NSManagedObject 
@property (nonatomic, retain) NSDate * date;
@end

@implementation Transaction
@dynamic date;

-(void)setDate:(NSDate *)date
{
    [self setPrimitiveValue:date forKey:@"date"];
    //additional stuff omitted
}
Run Code Online (Sandbox Code Playgroud)

  • 之前调用willChangeValueForKey并在保持KVO之后调用didChangeValueForKey. (2认同)