2011-07-08 5 views
1

iOSアプリケーションでCoreDataを使用しています。 xcdatamodelでBooleanとマークされたフィールドとモデル化されたNSNumber以外はすべて正常に動作します。 この種のフィールドでは、拡張クラスでいくつかのユーティリティメソッドを記述したいと思っていますが、どこに最適な場所を書くのか、ベストプラクティスなのでしょうか。 MyManagedObject.hで拡張NSManagedObjectクラスのラッパーメソッドobjective-c

は私が持っている:

@interface MyManagedObject : NSManagedObject { 
@private 
} 
@property (nonatomic, retain) NSNumber * mandatory; 
@end 

義務は、データモデルのbooleanです。

[myManagedObject mandatoryWrapper:YES]; 


-(void)mandatoryWrapper:(BOOL)mandatory { 
    // convert boolean to number 
    self.mandatory=convertedMandatory; 
} 

:適切なように、私はおそらく、エンティティ自体に、どこかのユーティリティのラッパー・メソッドを記述する必要があるエンティティを使用するため、この時点で

@implementation MyManagedObject 
@dynamic mandatory; 

:これはXcodeのから生成されたクラスでありますしかし、私は「混乱」を発生させないために、元のgetter/setterメソッドを使用することを目指しています:

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

を私は、元のメソッドを書き換えることで、後にいくつかの問題が発生することを想定しますたとえば、コンテキストで保存または取得する場合など、アプリケーションのライフサイクルに影響を与えます。

ありがとうございました。

答えて

0

本当のブール値のプロパティが必要な場合は、名前を変更する必要があります。私はエンティティがそれらについて知る必要がないので、それをクラスのプロパティでありエンティティではなく単にプロパティにすることをお勧めします。これは以下のようにあなたがconvience構造を使用することができます

@property BOOL isMandatory; 

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

-(void) setIsMandatory:(BOOL) boolVal{ 
    self.mandatory=[NSNumber numberWithBool:boolVal]; 
} 

:あなたのケースでは

、あなたのような何かを必要とするエンティティがするNSNumberプロパティをモデル化するため、コアデータが幸せである

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

まだそこにあると期待どおりに動作しますが、人間はブールバージョンを理解しやすくなります。