【问题标题】:How do I generate an instance of an array for multiple objects (of the same Entity type) in Core Data?如何在 Core Data 中为多个对象(相同实体类型)生成数组实例?
【发布时间】:2016-11-28 16:55:48
【问题描述】:

我对编程很陌生,所以希望我能正确解释这一点,但有一些上下文:我目前在 Core Data 中有一个 Restaurant 实体,用户可以添加新对象(Sbarro、麦当劳等餐厅) 、必胜客、ShakeShack 等)。我还有一组 .csv 预加载菜单项(使用我在 Core Data 中创建的 MenuItem 实体),其中包括炸薯条、比萨饼、汉堡包、鸡肉等。

我现在设置的是一个详细视图,用户可以从餐厅列表中导航到该视图。有一个“菜单”按钮可以显示我的菜单项列表,可以选择“是”或“否”选项。这映射到菜单项数组中isAvailableBool 属性。

目前,我可以保存一家餐厅是否有龙虾,但是当我点击任何其他餐厅时,龙虾也会显示为可用(显然是一个问题,因为麦当劳不供应龙虾),因为我更改主菜单项数组中的Bool

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

【问题讨论】:

    标签: arrays core-data swift3 relationship


    【解决方案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 并在那里执行。
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多