如何将我的卡转换为NSSet?

时间:2016-02-01 03:59:30

标签: ios swift uitableview core-data

我正在尝试向Card张卡添加新的Deck,但在尝试将卡片保存到卡片cards时遇到了问题。如何将其转换为NSSet

func saveQA(question: String, answer: String) {
    let currentDeckName = deckName
    let entity = NSEntityDescription.entityForName("Card", inManagedObjectContext: managedContext)
    let newQA = Card(entity: entity!, insertIntoManagedObjectContext: managedContext)
    newQA.question = question
    newQA.answer = answer
    currentDeckName!.cards = newQA

    do {
        try managedContext.save()
        userCards.append(newQA)
    }
    catch {
        let saveError = error as NSError
        print(saveError)
    }
}

2 个答案:

答案 0 :(得分:1)

在此,您尝试将Card分配给期望NSSet的媒体资源。卡不是一组(虽然它可能是一组中的对象)。

currentDeckName!.cards = newQA

利用类型安全

由于您使用Swift编写代码,因此首先应该使用Swift类型,例如Set而不是NSSet。在Deck+CoreDataProperties.swift中,将您的关系从NSSet?更改为打印的一组卡片。

@NSManaged var cards: Set<Card>

这不仅告诉Swift cards是一个Set,还指定集合中的对象为Card s。

您总是希望声明关系的特定类型,以便从语言的类型安全性中受益。这允许编译器阻止您向卡组的卡片添加除Card之外的任何内容。

将卡片添加到卡座

您可以使用常规Set方法(例如insert)将卡片插入卡片组。

currentDeckName.cards.insert(newQA)

然而,更容易的方法是在卡本身上使用反向关系。换句话说,告诉新卡它属于这个套牌:

newQA.deck = currentDeckName

这会自动将卡片添加到套牌的卡片中。

代码少一些,阅读和理解通常会更少。

说到可读性,您可能需要考虑将currentDeckName重命名为currentDeck,因为该对象是Deck,而不是套牌的名称。

答案 1 :(得分:0)

要将对象转换为MutableSet,请通过以下步骤进行验证。

1)选择model object
2)选择您的父母entity
3)选择Relationshipone To many 4)现在检查以下图片property是否为one To many

enter image description here