2011-10-10 69 views
0

我有以下工厂方法。 ,我只是想知道,如果分配我可以为自己分配一个刚插入的ManagedObject吗?

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

是正确鉴于我的类是NSManagedObject

的子类

感谢

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

... 

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

... 

return self; 

回答

2

不,这是不正确的。您只能在init方法内分配给self。对于工厂类型的方法,您应该返回一个变量,例如

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

//Other stuff 

return newItem; 
+0

好的。如果工厂方法是由CBItem的子类调用的呢?我应该使用演员吗? (CBSubClassItem = [CBSubClassItem insertEntityForName:entityName fromXMLElement:xmlElement];) – aneuryzm

+0

好吧,返回的类无论如何都依赖于实体名称,您可以一直使用'id'并且只分配给您原始的正确类型的变量调用函数?如果不知道你想达到什么,这很难说。 – jrturton

+0

好吧,我要返回超类,并且它可以工作。我有点惊讶:我正在返回一个类,并将返回的值分配给一个子类。 – aneuryzm

0

自我在一个类方法中(用+声明而不是 - )声明类对象。尽管一旦在任何方法中,自我就像一个局部变量。你可以将它重新分配给任何你想要的东西,只要你不希望它继续像自我通常那样行事。所以你在做什么不会被打破,尽管它可能会让人困惑。

相关问题