覆盖具有弧和动态属性的setter [英] Overriding setters with arc and dynamic properties
本文介绍了覆盖具有弧和动态属性的setter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要在setter方法中做一些额外的事情。但是这样做会得到一个无限循环:
I need to do some additional stuff in a setter method. But I get an infinite loop when doing so:
我有一个核心数据对象
@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
版本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
}
版本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?
推荐答案
我的问题的解决方案:
@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
}
这篇关于覆盖具有弧和动态属性的setter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文