ios - 在 Swift Core Data 中设置一对多关系的问题

标签 ios swift core-data compiler-errors xcode6.1

我正在学习 Swift 的过程中遇到了一个我似乎无法找到解决方案的问题。

目前我的数据模型中有两个实体:Card 和 Set

Model Graph

一个集合可以有很多卡,但一张卡只能属于一个集合。

我的卡片关系设置为“To Many”:

Model Graph

当我的关系设置为“To One”时:

Model Graph

对于这两个实体,我有以下子类代码:

import Foundation
import CoreData

@objc(Set) class Set: NSManagedObject {

    @NSManaged var code: String
    @NSManaged var name: String
    @NSManaged var cards: NSSet

}

extension Set {
    func addCard(value: Card) {
        self.mutableSetValueForKey("cards").addObject(value)
    }

    func getCards() -> [Card] {
        var cards: [Card]
        cards = self.cards.allObjects as [Card]
        return cards
    }
}

import Foundation
import CoreData

@objc(Card) class Card: NSManagedObject {

    @NSManaged var name: String
    @NSManaged var set: Set

}

我已经使用如下代码成功创建并验证了一个 Set:

var set = NSEntityDescription.insertNewObjectForEntityForName("Set", inManagedObjectContext: context) as Set
set.name = setName;
set.code = setCode;

context.save(nil)

但是,稍后当我尝试创建 Card 对象并将它们添加到此集合时,我遇到了错误。这是我为此使用的代码:

// The json data here is already verified as working fine elsewhere in my code, it just serves as the basis for creating the Card objects
var cards: [AnyObject] = json.valueForKey("cards") as NSArray

for var i = 0; i < cards.count; i++ {
    var cardData = cards[i] as NSDictionary

    var card = NSEntityDescription.insertNewObjectForEntityForName("Card", inManagedObjectContext: context) as Card
    card.name = cardData.valueForKey("name") as String

    set.addCard(card)

    context.save(nil)
}

当前引发的错误如下:

2015-01-19 00:25:42.803 <app name>[4667:113927] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSSet intersectsSet:]: set argument is not an NSSet'

我尝试尽可能接近故障点来跟踪错误。它似乎发生在 Set 扩展中的 addCard 函数中。我猜我的代码中有一些非常小的错误,但由于我对调试 Swift 代码还很陌生,所以我目前不知道下一步该去哪里。实际上,我之前已经将卡片分配给了一组,但我所做的更改肯定导致了此问题的发生。

最佳答案

您应该重命名 Set 扩展中的 getCards() 函数,我相信核心数据使用此函数名称,并且问题发生是因为您覆盖了它。

关于ios - 在 Swift Core Data 中设置一对多关系的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28020890/

相关文章:

ios - 使用 Storyboard和 plist 文件将 uitableview 单元格用作按钮

ios - 通知中心的图像预览

ios - 如何知道坐标是否在 MapKit iOS 相机之外?

ios - 如何将带有字符串 @"XYZ"的部分设置为表格 View 中的第一部分

ios - iOS 上 SQLite 或 Core Data 数据库的最大大小是多少?

ios - 无法将核心数据文件添加到我现有的项目(版本控制问题)...?

ios - 如何以编程方式更改搜索栏中选择的范围?

ios - 如何让我的 iOS7 UITableViewController 不出现在顶部状态栏下?

swift - Swift 5.1 中的递归枚举问题

ios - 使用 'MKMapView' 显示多个位置