首页 文章

如何在Swift中初始化生成的Core Data NSManagedObject

提问于
浏览
5

我知道obj-c但我很快就学会了 .

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

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

    my.name = @"some name";
}

在swift中我试图做同样的事情,但我似乎无法弄清楚如何初始化我的自定义对象 . 这就是我所拥有的:

生成的NSManagedObject子类:

import Foundation导入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"

但我得到的错误是:

初始化之前使用的变量'卡'

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

另外,正如几位iOS教师提到的那样,你不应该混淆生成的NSManagedObject子类 .

有什么建议?

Edit 我现在收到错误:(应该是一个新的SO问题...)

CoreData:警告:无法为实体'Card'加载名为'Card'的类 . 找不到类,而是使用默认的NSManagedObject .

以下是显示此类在构建阶段中如何存在以及实体名称已在xcdatamodeld文件中设置的屏幕截图
enter image description here

enter image description here
谢谢

2 回答

  • 8

    你有这个:

    var card : Card
    

    这声明 card 的类型为 Card 但不创建实例 . 您需要在使用之前分配和初始化实例 . 这里的初始化规则与Objective-C中的相同,即您必须在对象上调用指定的初始化程序 . 你会做这样的事情:

    var card = NSEntityDescription.insertNewObjectForEntityForName("Card", inManagedObjectContext: self.managedObjectContext) as! Card
    

    对于它的 Value ,您的Objective-C片段不正确,因为 init 不是 NSManagedObject 的指定初始值设定项 .

  • 1

    您声明变量 card 但从不初始化它 .

    您将需要Core Data上下文,然后您可以创建一个实例:

    let entity = NSEntityDescription.entityForName("Card", inManagedObjectContext: managedObjectContext)
    let card = Card(entity: entity!, insertIntoManagedObjectContext: managedObjectContext)
    

    这将在上下文中设置一个空的 Card 实例 . 保存上下文后,您的新卡将存放在商店中 .

相关问题