Ios 使用圆弧和动态属性替代设置器
我需要在setter方法中做一些额外的工作。但这样做时,我会得到一个无限循环: 我有一个核心数据对象Ios 使用圆弧和动态属性替代设置器,ios,core-data,ios5,overriding,setter,Ios,Core Data,Ios5,Overriding,Setter,我需要在setter方法中做一些额外的工作。但这样做时,我会得到一个无限循环: 我有一个核心数据对象 @interface Transaction : NSManagedObject @property (nonatomic, retain) NSDate * date; @end @implementation Transaction @dynamic date; -(void)setDate:(NSDate *)date { self.date = date; //ad
@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
@synthesize date = _date;
-(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
}
以下是在.m中覆盖NSManagedObject属性而不破坏KVO的Apple方法:
@interface Transaction (DynamicAccessors)
- (void)managedObjectOriginal_setDate:(NSDate *)date;
@end
@implementation Transaction
@dynamic date;
- (void)setDate:(NSDate *)date
{
[self managedObjectOriginal_setDate:(NSString *)date;
// your custom code
}
如本页底部所示在之前调用willChangeValueForKey,在之后调用didChangeValueForKey以保留KVO。