Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 我可以将刚插入的ManagedObject分配给self吗?_Objective C_Cocoa_Core Data - Fatal编程技术网

Objective c 我可以将刚插入的ManagedObject分配给self吗?

Objective c 我可以将刚插入的ManagedObject分配给self吗?,objective-c,cocoa,core-data,Objective C,Cocoa,Core Data,我有以下工厂方法。我只是想知道这个作业 self = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:[self managedObjectContext]]; 是正确的,因为我的类是NSManagedObject的子类 谢谢 + (CBItem *)insertEntityForName:(NSString*)entityName fromXMLElement:(N

我有以下工厂方法。我只是想知道这个作业

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;

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

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

//Other stuff

return newItem;

类方法中的self(用+而不是-)引用类对象。然而,一旦在任何方法中,self就像一个局部变量。你可以把它重新分配给你想要的任何东西,只要你不希望它继续像你通常想象的那样。因此,您所做的不会被破坏,尽管它可能会令人困惑。

好的。如果工厂方法由CBItem的子类调用,该怎么办?我应该用石膏吗?(CBSubClassItem=[CBSubClassItem insertEntityForName:entityName fromXMLElement:xmlElement];)好吧,返回的类取决于实体名称,您可以一直使用
id
,并且只从原始调用函数中分配给正确类型的变量?很难说不知道你想要实现什么。好吧,我将返回超类,它会起作用。我有点惊讶:我返回一个类,并将返回的值赋给一个子类。insertNewObjectEtc返回子类的一个实例。然后将其分配给基类的一个变量,并将其作为基类的类型返回。然后将其分配给子类的一个变量。所以从开始到结束,这个实例一直是子类的一部分,它只是在一个更通用的变量中。“Objective C在允许对更具体的类型进行强制转换方面相当宽松。@morningstar我明白了!insertNewObjectEtc正在返回我的类,这就是原因。我猜如果我用alloc]init]an初始化基类并返回它,编译器会抱怨。