当上下文为零时,Swift Temp CoreData对象无法设置ivars

问题描述:

我有一个CoreData对象,我想实例化(暂时使用),但我不想保存或插入上下文中进行持久化。当上下文为零时,Swift Temp CoreData对象无法设置ivars

我的,因为我想创建对象类的定义是这样的:

import Foundation 
import CoreData 

@objc(USubmission) 

class USubmission: NSManagedObject { 

    @NSManaged var subid: NSNumber 

我创建这样的对象(临时使用,但不坚持)

let entitiyDesc = NSEntityDescription() 
entitiyDesc.name = "USubmission" 
entitiyDesc.managedObjectClassName = "USubmission" 
let sub = USubmission.init(entity: entitiyDesc, insertIntoManagedObjectContext: nil) 

然而,当我设置其中一个临时对象的ivars我得到以下错误:

sub.subid = 0 

错误:

[USubmission setSubid:]: unrecognized selector sent to instance

我检查了对象,它看起来像正确的对象而不是NSManagedObject对象。

为什么当上下文为零(临时对象)时与存在上下文时会出现此错误?

+0

正如@messeb在他的回答中指出的,问题源于实体描述。您从头开始创建它,它与您的模型中提供的定义截然不同(尽管它具有相同的名称和模型类)。在'entityForName:inManagedObjectContext:'类方法中指定一个上下文提供了一个指向模型的链接(context - > psc - > model)。 – pbasdf

你必须从你的ManagedObjectContext创建一个实体描述:

let entitiyDesc = NSEntityDescription.entityForName("USubmission", inManagedObjectContext: **yourContext**) 

如果你不想保存对象,这就是与实体创建的,不是通过insertIntoManagedObjectContext,像你已经做的那样:

let sub = USubmission.init(entity: entitiyDesc, insertIntoManagedObjectContext: nil) 
+0

就是这样!只需要传入NSEntityDescription的有效上下文,并且它现在正在工作。谢谢你的帮助!! – Ranknoodle