2012-01-09 6 views
0

CoreDataエンティティでのオブジェクトの比較がどのように行われるのだろうか。 多対多の関係を持つ2つのエンティティがあるとします。今、私はすべてのEntityBは、エンティティAを渡して取得したいCoreDataのオブジェクト作成と比較の理解

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"prop1=%@",x]; 
EntityA *entityA = //execute fetch 

EntityA { 
prop1 
entityB <-- to-many relationship 
} 

EntityB { 
.... properties 
entityA <-- one-to-one relationship 
} 

私はのは一つだけエンティティAは、このような基準を満たすが言わせて簡単にするために、NSPredicateと一定のPROP1を持つエンティティを取得したいと仮定すると基準として:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"EntityA=%@",entityA]; 
EntityB *entityB = //execute fetch 
EntityA *parentA = entityB.entityA; 

この時点では再どうなるか、私は任意のメソッドをオーバーライドしませんでしたが、エンティティAとEntityBがちょうどNSManagedObjectを拡張することを考慮すると、この声明のsult?

if(entityA==parentA) NSLog(@"YES"); 
else NSLog("NO"); 

「はい」の場合、なぜそのような結果が得られますか?私は同じ実行でいくつのオブジェクトを持っていますか?たとえば、私がJavaで知っている永続化レイヤーを使用すると、2つの異なるオブジェクトが生成され、関連するクラスのequalsメソッドをオーバーライドしてそこにロジックを実装すると、比較は「YES」になります。

このケースでは、CoreDataが何らかのオブジェクトのキャッシュと再利用を行っているのだろうかと思います。 entityB点場合

おかげでのObjective-C ==において

答えて

0

は、メモリ内の同じオブジェクトをチェックします。比較を行うにはisEqual:メソッドを使用します。 isEqual:メソッドを実行した場合はYESを返し、==の場合はNOを返す可能性が高いと思います。

1

管理対象オブジェクトは、objectIDを使用して識別されます.2つの「オブジェクト」が実際に同じ管理対象オブジェクトを表す場合、そのオブジェクトIDは同じになります。

[[objectA objectID] isEqual:[objectB objectID]] 

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectID_Class/Reference/NSManagedObjectID.html

を参照してください:あなたがすることによってこれを決定することができます
関連する問題