如何在 Core Data 中为多个对象(相同实体类型)生成数组实例?
Posted
技术标签:
【中文标题】如何在 Core Data 中为多个对象(相同实体类型)生成数组实例?【英文标题】:How do I generate an instance of an array for multiple objects (of the same Entity type) in Core Data? 【发布时间】:2016-11-28 16:55:48 【问题描述】:我对编程很陌生,所以希望我能正确解释这一点,但有一些上下文:我目前在 Core Data 中有一个 Restaurant
实体,用户可以添加新对象(Sbarro、麦当劳等餐厅) 、必胜客、ShakeShack 等)。我还有一组 .csv 预加载菜单项(使用我在 Core Data 中创建的 MenuItem
实体),其中包括炸薯条、比萨饼、汉堡包、鸡肉等。
我现在设置的是一个详细视图,用户可以从餐厅列表中导航到该视图。有一个“菜单”按钮可以显示我的菜单项列表,可以选择“是”或“否”选项。这映射到菜单项数组中isAvailable
的Bool
属性。
目前,我可以保存一家餐厅是否有龙虾,但是当我点击任何其他餐厅时,龙虾也会显示为可用(显然是一个问题,因为麦当劳不供应龙虾),因为我更改主菜单项数组中的Bool
。
我的问题是:如何为每个单独的餐厅生成菜单项数组的实例,以便可以保存菜单项的isAvailable
状态?在最理想的情况下,每个人如果我对主菜单进行更改,餐厅的菜单项数组将会更新,但这听起来好得令人难以置信。我尝试在 Core Data 中的 Restaurant
和 MenuItem
实体之间建立多对多关系,但我不知道如何通过我的餐厅对象访问菜单项。
【问题讨论】:
【参考方案1】:通常的方法是去掉isAvailable
属性,而是使用多对多关系来跟踪哪个餐厅有哪些菜单项。您不会为每个Restaurant
创建一个新的MenuItem
集,而是为每种类型创建一个MenuItem
,并将每个MenuItem
仅与拥有该项目的餐厅相关联。
例如给定两个Restaurant
实例,
myRestaurant1.name = "McDonald's"
myRestaurant2.name = "Seafood Wonderland"
...还有一个MenuItem
,只有其中一个提供,
myMenuItem.name = "Lobster"
仅将菜单项添加到一家餐厅的 menuItems
关系中。使用 Xcode 8 自动生成类,类似于
myRestaurant2.addToMenuItems(myMenuItem)
使用关系查找每个餐厅的菜单项:
let restaurant1MenuItems = myRestaurant1.menuItems
let restaurant2MenuItems = myRestaurant2.menuItems
这会为您提供NSSet
的菜单项。此时,myRestaurant1MenuItems
不包含龙虾,但 myRestaurant2MenuItems
包含。
【讨论】:
感谢您的回复!这肯定会奏效,但我在我的 OP 中使用的示例是(诚然糟糕的)试图混淆我正在构建的应用程序的真实概念。如果我们假设有必要为每个餐厅生成一组菜单项(为了讨论),是否可以这样做? 是的,只需创建实例。不过,很难想象这样的设计不会是非常糟糕的设计。 正式指出它可能是非常糟糕的设计!我将如何为每个餐厅对象生成菜单项数组的实例?这就是我卡住的地方。 您可以在任何方便的地方创建实例。我可能会在我的托管对象子类中覆盖awakeFromInsert
并在那里执行。以上是关于如何在 Core Data 中为多个对象(相同实体类型)生成数组实例?的主要内容,如果未能解决你的问题,请参考以下文章
如何在“详细”实体视图中为“主/父”实体“保存”(核心数据)?
我如何在 Core Data 中为球队、比赛和主客场球队关系建模?
Restkit/Core Data 关系映射,实体到相同类型的实体(父/子)