2011-07-08 21 views
1

我在iOS應用程序中使用CoreData。一切工作正常,除了在xcdatamodel中標記爲布爾值的字段以及建模和NSNumber。 對於這類字段,我想在擴展類中編寫一些實用方法,但我想知道寫入它們的最佳位置在哪裏,或者什麼是最佳實踐。擴展NSManagedObject類中的包裝方法objective-c

在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不產生「混亂」:

// setter 
myManagedObject.mandatory=YES; 
//getter 
if(myManagedObject.isMandatory) 

,但我想,改寫原來的方法,稍後會造成一些問題,在應用程序生命週期,例如在上下文中保存或檢索時。

謝謝。

回答

0

如果你想要一個真正的布爾屬性,那麼你被迫更改名稱。我建議把它作爲類的一個屬性而不是實體,因爲實體不必知道它們。

在你的情況,你需要這樣的:

@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的屬性仍然存在,按預期工作,但人可以使用更容易理解的布爾版本。