swift - 使用 Swift 在 Core Data 中创建多对多关系
问题描述
我正在开发一个闪存卡应用程序,并希望用户能够拥有包含多张卡片的卡片组,并将卡片分配给多个卡片组。例如,有人可能会为“米开朗基罗”、“莱昂纳多·达芬奇”和“伽利略·伽利莱”创建套牌,每个套牌都包含他们许多作品的卡片,但随后他们可能会拥有另一个名为“意大利文艺复兴”的套牌,其中包含所有这些卡片。
如何使用 Swift 建立这种多对多关系。我试图环顾四周,似乎普遍的共识是重新设计结构以仅具有一对多关系,但我不相信我想要实现的目标是可能的。我在想这个错误的方式吗?
任何帮助表示赞赏!谢谢你。
解决方案
方法:
在两个关系上创建to many
关系
怎么做:
- 创建实体
Card
- 创建实体
Deck
- 在 Entity
Card
上,创建一个名为decks
. 让目的地成为Deck
并使其成为一种to many
关系。 - 在 Entity
Deck
上,创建一个名为cards
. 设目的地为Card
并选择逆关系为decks
注意:确保正确设置反向关系,这在您使用它们时至关重要,因为您只需执行关系的一侧,核心数据将处理关系的另一侧。
我刚刚粘贴了2个屏幕截图,希望对您有所帮助。
卡关系:
甲板关系:
代码:
class LocalDataStorage {
func test() {
let context = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
let card1 = Card(context: context)
card1.title = "c1"
let card2 = Card(context: context)
card2.title = "c2"
let deck1 = Deck(context: context)
deck1.title = "d1"
let deck2 = Deck(context: context)
deck1.title = "d2"
card1.decks = [deck1, deck2]
card2.decks = [deck1]
//Notice how the inverse relationships automatically work
print("deck1.cards = \(String(describing: deck1.cards))") //2 elements
print("deck2.cards = \(String(describing: deck2.cards))") //1 element
}
}
推荐阅读
- javascript - SQLite“SELECT”包装函数返回空对象
- python - 计算数据框中多个组的 z 分数
- azure - 如何在两个虚拟网络之间建立连接?
- c# - C#如何索引数组
- java - Java简单数字游戏App在EditText为空时崩溃
- javascript - setstate 然后在 rest api 中响应
- nullpointerexception - 使用 savedInstanceState.getParcelableArrayList 时出现 java.lang.NullPointerException
- go - 如何在 go 项目中供应所有包
- java - “验证类型”设计模式
- python - 如何读取文件的确切字节?