我需要在 setter 方法中做一些额外的事情。但是这样做时我得到了一个无限循环:
我有一个核心数据对象
@interface Transaction : NSManagedObject
@property (nonatomic, retain) NSDate * date;
@end
@implementation Transaction
@dynamic date;
-(void)setDate:(NSDate *)date
{
self.date = date;
//additional stuff omitted
}
所以,在这种情况下,我得到了一个无限循环。好的,所以我在网上搜索并按以下方式修改了我的代码,对于每个版本我都会遇到编译器错误
版本 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
}
现在,我问自己如何做到这一点?
最佳答案
我的问题的解决方案:
@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
}
关于ios - 使用 arc 和 dynamic 属性覆盖 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8545799/