Ios 如何在Swift中初始化生成的核心数据NSManagedObject

Ios 如何在Swift中初始化生成的核心数据NSManagedObject,ios,swift,core-data,Ios,Swift,Core Data,我知道obj-c,但我正在学习swift 在obj-c中,当使用核心数据时,您对数据建模,并告诉xcode生成模型的nsmanageobject子类。 然后在代码中将其初始化为 #import MyObject - (void) someMethod { MyObject *my = (Card *) [NSEntityDescription insertNewObjectForEntityForName:@"Card" inManagedObjectContext:[self mana

我知道obj-c,但我正在学习swift

在obj-c中,当使用核心数据时,您对数据建模,并告诉xcode生成模型的nsmanageobject子类。 然后在代码中将其初始化为

#import MyObject
- (void) someMethod
{
    MyObject *my = (Card *) [NSEntityDescription insertNewObjectForEntityForName:@"Card" inManagedObjectContext:[self managedObjectContext]];

    my.name = @"some name";
}
在swift中,我尝试做同样的事情,但我似乎不知道如何初始化自定义对象。 这就是我所拥有的:

生成的NSManagedObject子类:

进口基础 导入CoreData

class Card: NSManagedObject
{
    @NSManaged var card_name: String
    @NSManaged var card_id: String
    @NSManaged var card_issuer: String
    @NSManaged var card_type: String
}
然后我试着在另一个类上使用它,比如:

var card : Card
card.card_name = "Some Name"
card.card_issuer = "HOA"
card.card_type = "Rec Center"
card.card_id =  "123"
var card = NSEntityDescription.insertNewObjectForEntityForName("Card", inManagedObjectContext: self.managedObjectContext) as! Card
但我得到的错误是:

初始化前使用的变量“card”

我显然错过了一个步骤,但我无法指出它是什么

另外,正如几位iOS讲师所提到的,您不应该处理生成的NSManagedObject子类

有什么建议吗

编辑 我现在得到一个错误:(应该是一个新的SO问题…)

CoreData:警告:无法为实体“Card”加载名为“Card”的类。未找到类,改为使用默认NSManagedObject

下面的屏幕截图显示了该类在构建阶段的存在方式,以及在xcdatamodeld文件中设置的实体名称


谢谢

您声明了变量
,但从未初始化它

您需要核心数据上下文,然后可以创建一个实例:

let entity = NSEntityDescription.entityForName("Card", inManagedObjectContext: managedObjectContext)
let card = Card(entity: entity!, insertIntoManagedObjectContext: managedObjectContext)
这将在上下文中设置一个空的
实例。当您保存上下文时,您的新卡将出现在商店中。

您有:

var card : Card
声明
card
属于
card
类型,但不创建实例。在使用实例之前,需要分配和初始化实例。这里的初始化规则与Objective-C中的相同,即必须调用对象上的指定初始化器。你可以这样做:

var card : Card
card.card_name = "Some Name"
card.card_issuer = "HOA"
card.card_type = "Rec Center"
card.card_id =  "123"
var card = NSEntityDescription.insertNewObjectForEntityForName("Card", inManagedObjectContext: self.managedObjectContext) as! Card

无论如何,您的Objective-C代码段是不正确的,因为
init
不是
NSManagedObject
的指定初始值设定项。我修复了obj-c初始化。2.这是一种仍然使用KVC的方法。我不想做“card.setValue(“HOA”,forKey:“card\u issuer”)”。我想做“card.card_issuer=“HOA”。这在swift中可能吗?我不知道您为什么认为这需要KVC。假设您的模型配置正确,这将创建
卡的实例
,您可以调用`card'上存在的任何方法。抱歉,我刚刚意识到您有“as卡”“最后,您直接使用EntityDescription,而不是我在obj-c上使用的两个步骤。让我看看这是怎么回事。谢谢奇怪的是,我一直收到一个“CoreData:warning:无法为实体“Card”加载名为“Card”的类。找不到类,而是使用默认的NSManagedObject。”这听起来像是您正在构建的目标中没有包含类
Card