我不想花时间把它翻译成 CoreData-speak 所以这是我在 SQL 中的想法:
SELECT * FROM quantifiedIngredients WHERE recipe <> NULL
或类似的东西。这本质上是 Nikita 关于使用标志的建议,只是“标志”是属性的存在。我不知道CoreData在遇到GroceryQuantifiedIngredients
没有时会如何反应recipe
,我认为KVO会抛出异常。您可能会大胆地添加一个类别:
@interface GroceryQuantifiedIngredients (KVOHack)
-(id)recipe;
@end
@implementation GroceryQuantifiedIngredients (KVOHack)
-(id) recipe { return nil; }
@end
这当然需要 CoreData 枚举所有 quantifiedIngredients,但我认为无论如何它都必须这样做,并且return nil
应该优化成微小的代码。另一个考虑因素是这是否会对您的其余代码产生不良影响;你必须打那个电话。
当我完成这件事时,另一个想到的想法是做这样的事情(我现在对我的伪代码变得非常松散):
SELECT * FROM quantifiedIngredients WHERE [i respondsToSelector:@selector(recipe)];
明白了吗?我忘记了 CoreData 是否允许您在使用谓词或 fetchedThingamabobbers 时使用某种游标,如果可以的话,我认为这是您最好的选择。不管怎样,现在是星期天下午,所以这些东西留给读者作为练习。
+1 提出一个好问题。