Как правило, с помощью Core Data вы будете проектировать и использовать модель данных, которая соответствует вашим потребностям. Вы не должны думать об этом с точки зрения SQL - ему даже не нужно использовать SQL для хранения - и вы не должны пытаться напрямую перевести SQL-запрос в запрос на выборку с помощью предиката и т. Д.
, иногда бывает полезно подумать с точки зрения предложений SQL WHERE при построении предикатов, но на самом деле получить запросы сводится к тому, что вам нужно получить, и как сбор должен быть отфильтрован и/или отсортирован и т. д.
Fetch запросы ограничены одним объектом, поэтому я думаю, вам понадобится несколько запросов на выборку для имитации вашего запроса.
Как выглядит ваша модель данных Core Data? Что вы пытаетесь достичь? что ты уже испробовал?
UPDATE
Это звучит как модель данных включает в себя две сущности: Напитки и Ингредиент с многие ко многим отношений между ними:
< < Drink - >> Ингредиент
Примечание что в Core Data нет компонента DrinkIngredient, если вы явно его не создали (есть дополнительная таблица для отношений «многие ко многим», но она отвлекается от вас). Так как вы хотите, значение суммы, связанные со строками в дополнительной таблице, я рекомендовал бы добавить DrinkIngredient сущность в Core Data:
< Drink - >> DrinkIngredient < < -> Ингредиент
примечание: DrinkIngredient имеет ровно один напиток и один ингредиент. Напитки могут иметь много DrinkIngredients и Ingredients, которые могут использоваться многими DrinkIngredients.
Похоже, вы хотите получить название и количество для списка ингредиентов для конкретного напитка. Чтобы сделать это, просто получать объекты DrinkIngredient с фильтром предиката, как это:
// assuming "aDrink" is a reference to a particular Drink object
// and "drink" is the relationship from DrinkIngredient to Drink
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"drink == %@",aDrink];
// if the fetch request result array is named "ingredientList"
// and the relationship from DrinkIngredient to Ingredient is "ingredient"
for (DrinkIngredient *di in ingredientList) {
NSString *ingredientName = di.ingredient.name;
NSUInteger amount = di.amount.integerValue;
// use "ingredientName" and "amount" here
}
Поскольку вы используете Core Data, а не SQL, вы делаете вещи по-другому. Например, если вы хотите отобразить список ингредиентов с именем и суммой для всех напитков, вы просто получите все объекты Drink (без предиката фильтра), и вы получите доступ к ингредиентам через отношения от Drink to DrinkIngredient.
Опять же, вы должны подумать о том, что вы пытаетесь выполнить, а также правильно спроектировать и использовать свою модель данных. Вы не должны думать о SQL или запросах.
Ну, запрос выше - это фактически запрос, который я использую для своего SQLite, я пытаюсь переключиться на coredata. Итак, у меня есть 1 стол напитка, у которого есть drinkName и drinkID, таблица InGredient с ингредиентомName и componentIDID. Таблица Drink_Ingredient представляет собой много-много отношений между напитком и ингредиентом, что 1 напиток может иметь несколько ингредиентов и один ингредиент может быть в рецепте разных напитков.Я знаю, как получить запрос от 1 объекта, но как насчет этой ситуации? Нужно ли мне менять свой дизайн db? –
Я обновил свой ответ с дополнительными рекомендациями на основе этой дополнительной информации. Дайте знать, если у вас появятся вопросы. – gerry3
большое спасибо. –