2013-05-19 31 views
5

我有两个类,Company和MyCompany。 MyCompany是Company的子类,Company是NSManagedObject的子类。我想为NSFetchRequest编写一个谓词,它将返回类Company的结果,但是会过滤掉MyCompany对象。NSPredicate过滤掉子类结果

我曾尝试以下(从这里https://stackoverflow.com/a/8065935/472344建议):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"class != %@",NSStringFromClass([myCompany class])]; 

但我得到一个错误:

'keypath class not found in entity <NSSQLEntity CKCompany id=1>' 

我还试图(从这里https://stackoverflow.com/a/11693983/472344的建议,我知道我真正想要的不是SELF是KindOfClass,但我只是用与答案中给出的完全相同的命令测试):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@", [myCompany class]; 

而且得到了以下错误:

'Unknown/unsupported comparison predicate operator type' 

我如何写一个谓词来实现我想要什么?我支持iOS 5及以上版本。

+0

有问题的类不是NSObject,因此它不响应“class”或“className” – Stavash

+0

Company和MyCompany都是NSObject,因为它们从NSManagedObject继承,但现在我意识到谓词正在应用于NSSQLEntity,所以我的情况并不等同于那些答案正在回应的情况。不过,我仍然需要解决我的问题。 – Darren

回答

7

您可以设置

[fetchRequest setIncludesSubentities:NO]; 

,使得读取请求只返回准确的要求, 的实体类型的对象,不包括子实体。

(就我所知),如果谓词用于核心数据提取请求中,则不可能在谓词中引用对象类或实体名称。

+0

这听起来像它会工作,并感谢您的额外信息。我会试试这个。 – Darren

+0

我可以确认它的工作原理。 – pr1001