我有一个包含三个Core Data实体的应用程序:Ingredients,Cookies和CookieIngredients。
我希望能够根据我在厨房里指出的成分来显示我可以制作的饼干。
我已成功将我的应用程序带到一个状态,其中所有这些实体都在Core Data中管理,并且我能够将成分标记为“在我的厨房中”,没有任何问题。我可以根据成分和标题搜索Cookies。
我一直无法找到任何示例来帮助理解如何创建NSPredicate来限制我的FetchedResultsController仅限于所有CookieIngredient的成分都在“我的厨房”中的Cookie。如果这是一个使用MySQL数据库的Web应用程序,我可以通过一些内部联接来实现这一点,但我不知道如何实现类似的东西 - 或者即使它可以做这样的事情 - 使用Core数据
答案 0 :(得分:2)
以下谓词应该有效:
let predicate = NSPredicate(format: "ALL ingredients.inKitchen = YES")
这假设您的Cookie
实体之间存在ingredients
关系,boolean
标记为inKitchen
。
答案 1 :(得分:2)
如果要获取Cookie
个对象,则谓词需要遍历(to-many)与CookieIngredient
的关系,并从那里将(到一个)关系遍历到{{1 }}。所以谓词应该是这样的:
Ingredient
这假定从let predicate = NSPredicate(format: "ALL cookieIngredients.ingredient.inKitchen = YES")
到Cookie
的关系被称为" cookieIngredients"从CookieIngredient
到CookieIngredient
的关系被称为"成分")。
我发现CoreData对多对多关系(即,ANY,ALL,NONE,SOME)的解析有点不可预测,所以我倾向于使用SUBQUERY来获得我想要的结果。在上面的例子中,(注意所有inKitchen = YES等同于说没有inKitchen = NO)我会使用:
Ingredient
答案 2 :(得分:1)
这是对我有用的谓词:
$(function() {
var checkboxstat = $("#triggerSTAT");
var checkbox = $("#trigger");
var hidden = $("#hidden_fields");
var hidden_f = $("hidden_field");
var checkbox2 = $("#trigger2");
var nogales = $("#hidden_nogs");
var nogi = $("#hidden_nogi");
hidden.hide();
nogales.hide();
checkbox.change(function() {
if ($('#trigger').is(':checked') && $('#triggerSTAT').is(':checked')) {
hidden.prop('disabled', false).show();
hidden_f.prop('disabled', false);
} else {
hidden.prop('disabled', true).hide();
hidden_f('disabled', true);
$("#hidden_field").disabled("disabled");
} else
if ($('#trigger2').is(':checked') && $('#triggerSTAT').is(':checked')) {
nogales.prop('disabled', false).show();
nogi.prop('disabled', false);
}
} else {
nogales.prop('disabled', true).hide();
nogi('disabled', true);
$("#hidden_nogi").disabled("disabled");
}
});
});