在 Swift Core Data 中设置一对多关系时出现问题
Issue setting up one to many relationship in Swift Core Data
我正在学习 Swift 并且遇到了一个我似乎无法拼凑出解决方案的问题。
目前我的数据模型中有两个实体:Card 和 Set
一个Set可以有很多张卡片,但是一张Card只能属于一个Set。
我的卡片关系设置为多人:
虽然我的设置关系设置为一个:
对于这两个实体,我有以下子类代码:
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
}
我已经使用如下代码成功创建并验证了一个集合:
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()
函数,我相信核心数据使用这个函数名称并且因为您覆盖了它而发生了问题。
我正在学习 Swift 并且遇到了一个我似乎无法拼凑出解决方案的问题。
目前我的数据模型中有两个实体:Card 和 Set
一个Set可以有很多张卡片,但是一张Card只能属于一个Set。
我的卡片关系设置为多人:
虽然我的设置关系设置为一个:
对于这两个实体,我有以下子类代码:
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
}
我已经使用如下代码成功创建并验证了一个集合:
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()
函数,我相信核心数据使用这个函数名称并且因为您覆盖了它而发生了问题。