如何为Core Data中的多个对象(具有相同实体类型)生成数组实例?

时间:2016-11-28 16:55:48

标签: arrays core-data swift3 relationship

我对编程非常陌生,所以我希望我能正确解释这一点,但有些背景:我目前在Core Data中有一个Restaurant实体,用户可以添加新对象(如Sbarro,McDonalds,PizzaHut,ShakeShack等餐厅)。我还有一组.csv预加载的菜单项(使用我在Core Data中制作的MenuItem实体),其中包括炸薯条,比萨饼,汉堡包,鸡肉等等。

我现在设置的是用户可以从餐馆列表导航到的详细视图。有一个'菜单'按钮会显示我的菜单项列表,其中包含“是”'或者没有'可以选择的选项。这会在菜单项数组中映射到Bool isAvailable属性。

目前,我能够保存一家餐馆是否有龙虾,但是当点击任何其他餐馆时,龙虾也会显示出来(显然这是因为麦当劳没有服务龙虾的问题)因为我正在更改主菜单项数组中的Bool

我的问题是:如何为每个餐厅生成菜单项数组的实例,以便菜单项'可以保存isAvailable状态吗?在最理想的情况下,如果我对主要餐厅进行了更改,每个餐厅的菜单项数组都会更新,但这听起来好得令人难以置信。我已尝试在Core Data中的RestaurantMenuItem个实体之间建立多对多关系,但我无法通过我的方式弄清楚如何访问菜单项餐厅对象。

1 个答案:

答案 0 :(得分:0)

通常的做法是摆脱isAvailable属性,而是使用多对多关系来跟踪哪个餐馆有哪些菜单项。您没有为每个MenuItem创建一个新的Restaurant集,您可以为每种类型创建一个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不包含龙虾。