Причина, по которой вы не видели примеры, подобные вашему объекту RecipeIngredient
, заключается в том, что вам не нужны совместные объекты, подобные данным Core Data. Вы обрабатываете базовые данные так, как если бы это была реляционная база данных, где вы обычно использовали таблицу соединений, чтобы создавать эффективные отношения «много-ко-многим» между объектами. Как поясняется в разделе Many-to-Many Relationships раздела Core Data Programming Guide, с основными данными все, что вам нужно сделать, это указать отношение «многие» в обоих направлениях между двумя объектами. Обратите внимание на вводное замечание в документации:
(Если у вас есть опыт работы в области управления базами данных, и это вызывает беспокойство вас, не волнуйтесь: если вы используете SQLite магазин, Core Data автоматически создает промежуточные присоединиться . таблица для вас)
Вот иллюстрация отношения, как вы должны моделировать его, разорвал прямо из модели редактора Xcode в:
Если вы все еще хотите увидеть примеры того, как это сделать, найдите что-то вроде «Основные данные для многих отношений», и вы найдете много. Вы можете начать здесь, на StackOverflow; быстрый поиск показал ряд примеров, в том числе How do you manage and use "Many to many" core data relationships?.
Обновление: Из вашего комментария, я понимаю, что вы хотите использовать промежуточный объект для добавления информации о взаимосвязи между рецептами и ингредиентами. То, что - это случай, когда требуется другое лицо. Так скажем, ваша модель выглядит следующим образом:
Это кажется маловероятным, что вы хотите, чтобы принести одну из этих RecipeIngredient
объектов непосредственно; вы, вероятно, просто выполните соответствующие отношения. Таким образом, вы можете создать запрос на выборку, чтобы найти все Рецепты, чье имя соответствует «шоколадный торт». (Существует множество примеров запросов на выборку с использованием предиката в документах и по всей сети, поэтому я не буду этого делать здесь.) Ваш запрос на выборку возвращает массив рецептов, которые мы могли бы назвать cakeRecipes
, но вы вероятно, интересуется только одним:
Recipe *cake = cakeRecipes.firstObject;
Теперь, что вы хотите знать об ингредиентах для вашего торта? Вот список ингредиентов:
NSArray *ingredientNames = cake.ingredients.ingredient.name;
Если вы хотите войти название ингредиентов и количество:
for (RecipeIngredient *i in cake.ingredients) {
NSLog(@"%@ %@", i.amount, i.ingredient.name);
}
Или, вы можете использовать выборки запроса, чтобы найти ингредиенты соответствующий «сельдерей» , сохраняя результат в celeries
.После этого, вы могли бы искать рецепты включая сельдерей:
Ingredient *celery = celeries.firstObject;
NSArray *recipes = celery.recipes.recipe
Если это не поможет, возможно, вы могли бы быть более конкретной информацией о проблеме. Кроме того, я знаю, что вы попросили Swift, но мои пальцы все еще используются для Obj-C, и языковые особенности на самом деле здесь не играют - Core Data работает одинаково на обоих языках.
Что это такое, что вы не понимаете, и что вы надеетесь учиться на примере? –