2016-11-28 1 views
0

Я очень новичок в программировании, поэтому надеюсь, что объясню это правильно, но в каком-то контексте: у меня в настоящее время есть объект Restaurant в Core Data, и пользователь может добавлять новые объекты (такие рестораны, как Sbarro, McDonalds, PizzaHut, ShakeShack и т. Д.). У меня также есть массив предварительно загруженных пунктов меню .csv (с использованием объекта , который я сделал в Core Data), который включает в себя такие вещи, как картофель-фри, пицца, гамбургеры, курица и т. Д.Как создать экземпляр массива для нескольких объектов (одного и того же типа Entity) в Core Data?

Что я сейчас установил подробный вид, который пользователь может перейти из списка ресторанов. Есть кнопка «меню», которая отображает список пунктов меню, с возможностью «да» или «нет», которую можно выбрать. Это соответствует Bool свойствам isAvailable в массиве пунктов меню.

На данный момент я могу сохранить, есть ли в ресторане, скажем, омары, но омар также отображается как доступный при нажатии на любой другой ресторан (очевидно, проблема с тех пор, как Макдональдс не служит омару) m меняя Bool в главном массиве пунктов меню.

Мой вопрос: Как создать экземпляр массива элементов меню для каждого отдельного ресторана, чтобы сохранить статус пунктов меню isAvailable? В самом идеальном случае каждый элемент меню каждого отдельного ресторана обновлялся, если бы я внес изменения в основной, но это звучит слишком хорошо, чтобы быть правдой. Я попытался установить отношения «многие ко многим» между моими объектами Restaurant и MenuItem в Core Data, но я не могу понять, как получить доступ к пунктам меню через мои объекты в ресторане.

ответ

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 делает.

+0

Благодарим вас за отзыв! Это определенно сработало бы, но пример, который я использовал в моем OP, был (по общему признанию, бедной) попыткой обмануть истинную концепцию моего приложения, которое я создаю. Если мы притворимся, что создание массива пунктов меню для каждого ресторана необходимо (ради обсуждения), можно ли это сделать? – MachTurtle

+0

Да, просто создайте экземпляры. Трудно представить себе сценарий, где это будет не очень плохой дизайн. –

+0

Duly отметил, что это может быть очень плохой дизайн!Как я могу создать экземпляр массива элементов меню для каждого объекта ресторана? Вот где я застрял. – MachTurtle

Смежные вопросы