扩展NSManagedObject类objective-c中的包装器方法

扩展NSManagedObject类objective-c中的包装器方法,objective-c,core-data,wrapper,Objective C,Core Data,Wrapper,我正在iOS应用程序中使用CoreData。除了在xcdatamodel中标记为布尔的字段(这些字段得到建模和NSNumber)之外,一切都正常。 对于这类字段,我想在扩展类中编写一些实用方法,但我想知道编写它们的最佳位置在哪里,或者最佳实践是什么 在MyManagedObject.h中,我有: @interface MyManagedObject : NSManagedObject { @private } @property (nonatomic, retain) NSNumber * ma

我正在iOS应用程序中使用CoreData。除了在xcdatamodel中标记为布尔的字段(这些字段得到建模和NSNumber)之外,一切都正常。 对于这类字段,我想在扩展类中编写一些实用方法,但我想知道编写它们的最佳位置在哪里,或者最佳实践是什么

在MyManagedObject.h中,我有:

@interface MyManagedObject : NSManagedObject {
@private
}
@property (nonatomic, retain) NSNumber * mandatory;
@end
其中必填项是数据模型中的布尔值。这是从xcode生成的类:

@implementation MyManagedObject
@dynamic mandatory;
此时,为了正确使用实体,我需要在某处编写一些实用程序包装方法,可能在实体本身中,例如:

[myManagedObject mandatoryWrapper:YES];


-(void)mandatoryWrapper:(BOOL)mandatory {
    // convert boolean to number
    self.mandatory=convertedMandatory;
}
但我的目标是使用原始的getter/setter来避免产生“混乱”:

但我认为,重写原始方法会在应用程序生命周期的后期导致一些问题,例如在上下文中保存或检索时


谢谢。

如果您想要一个真正的布尔属性,则必须更改名称。我建议只将它作为类的属性,而不是实体,因为实体不必知道它们

在您的情况下,您需要以下内容:

@property BOOL isMandatory;

-(BOOL) isMandatory{
   return [self.mandatory boolValue];
}

-(void) setIsMandatory:(BOOL) boolVal{
  self.mandatory=[NSNumber numberWithBool:boolVal];
}
这使您可以使用方便的结构,如:

If (self.isMandtaory)...
self.isMandatory=YES;
核心数据很高兴,因为实体建模的NSNumber属性仍然存在,并按预期工作,但人类可以使用更容易理解的布尔版本

If (self.isMandtaory)...
self.isMandatory=YES;