当使用带有谓词的NSFetchRequest时,iOS上的NSFetchedResultsController和Mac上的NSArrayController之间存在不一致,该谓词包含由对象类定义的属性,而不是实体属性的一部分。
考虑由Foo类实现的托管对象实体Foo。 Foo包含一个属性BOOL isFoo,它由类Foo实现,但不受属性支持(即不是实体Foo的模式的一部分)。现在使用isFoo作为NSArrayController的谓词中的条件工作得很好。可以假设这意味着谓词在被提取后应用于对象,因此命中对象类。但是,在iOS上,使用相同的谓词会导致找不到isFoo的NSInvalidArgumentException。在iOS上,谓词似乎在创建Foo对象之前在NSSQLEntity对象上进行评估。
需要一个相当具体的跨平台项目来展示这一点,但我还没有找到能够说明这种差异的文档。
答案 0 :(得分:0)
在我的特定情况下,有问题的属性只是实体中存在的属性的包装器,因此我可以专门为iOS修改我的谓词。但是,在一般情况下,这可能是NSFetchedResultsController的一个主要限制。