Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Overriding setters with arc and dynamic properties

I need to do some additional stuff in a setter method. But I get an infinite loop when doing so:

I've got a core data object

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

@implementation Transaction
@dynamic date;

-(void)setDate:(NSDate *)date
{
    self.date = date;
    //additional stuff omitted
}

So, in that case I get an infinite loop. Okay so I searched on the net and modified my code in the following way and for every version I get compiler errors

Version 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
}

Version 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
}

Now, I'm asking myself how to do this?

like image 383
toom Avatar asked Nov 30 '25 10:11

toom


1 Answers

The solution to my problem:

@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
}
like image 93
toom Avatar answered Dec 03 '25 00:12

toom



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!