2011-10-10 14 views
0

私は以下のファクトリメソッドを持っています。割り当てちょうど挿入されたManagedObjectを自分に割り当てることはできますか?

self = [NSEntityDescription insertNewObjectForEntityForName:entityName 
inManagedObjectContext:[self managedObjectContext]]; 

は、私のクラスはありません、これは正しくないおかげ

+ (CBItem *)insertEntityForName:(NSString*)entityName fromXMLElement:(NSXMLElement*)xmlElement withQueryType:(CBSearchQueryType)queryType inContext:(NSManagedObjectContext *)inContext 

... 

self = [NSEntityDescription insertNewObjectForEntityForName:entityName 
inManagedObjectContext:[self managedObjectContext]]; 

... 

return self; 

答えて

2

NSManagedObject

のサブクラスであるという事実を考えると、正しいかどうか私は思ったんだけど。 initメソッド内のselfにのみ割り当てます。ファクトリタイプのメソッドの場合は、変数を返す必要があります。

CBItem* newItem = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:[self managedObjectContext]]; 

//Other stuff 

return newItem; 
+0

OK。ファクトリメソッドがCBItemのサブクラスによって呼び出された場合はどうなりますか?キャストを使うべきですか? (CBSubClassItem insertEntityForName:entityName fromXMLElement:xmlElement;) – aneuryzm

+0

返されるクラスはエンティティ名に依存しますが、 'id'を使って元の型から正しい型の変数に割り当てることができます関数を呼び出す?あなたが達成しようとしていることを知らなくても、言うことは難しいです。 – jrturton

+0

さて、私はスーパークラスを返して、それは動作します。私は少し驚きです:私はクラスを返すと私はサブクラスに返された値を割り当てています。 – aneuryzm

0

自己( - の代わりに+で宣言された)は、クラスオブジェクトを参照します。しかし、いったんどのメソッド内であっても、selfはローカル変数のようなものです。あなたは自分が望むものにそれを再割り当てすることができます、あなたがそれが通常想定されているように行動し続けることを期待しない限り。だからあなたがやっていたことは壊れることはありませんが、混乱する可能性があります。

関連する問題