Ios 如何在Swift中初始化生成的核心数据NSManagedObject
我知道obj-c,但我正在学习swift 在obj-c中,当使用核心数据时,您对数据建模,并告诉xcode生成模型的nsmanageobject子类。 然后在代码中将其初始化为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
#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
。