NSPredicate与Custom NSObject

时间:2015-01-30 11:10:32

标签: ios core-data nspredicate

通常在尝试创建NSPredicate时,您会使用NSStringNSNumberNSDate。我试图从未指定的类中创建NSPredicate

这就是我创建谓词的方式:

[NSPredicate predicateWithFormat:@"property == %@", value];

如果值为NSString,这样可以正常工作,但如果我创建MyIdObject并将值设置为MyIdObject,我会得到稍微不同的谓词

这是我得到的谓词的结果:

使用NSString:property ==" 123"

使用MyIdObject:property == 123

由于标识符在NSString中保存为CoreData,因此足以使谓词失败。

我知道123是从描述方法返回的。

只需添加所需的"在谓词格式中不是一个解决方案,因为那时我将获得属性=="%@"

由于某些原因,NSStringMyIdObject返回时,其处理方式与NSString不同。对此有什么解决方案吗?

尝试简化问题:我想使用任意NSObject作为值而不是NSString创建谓词,尽管该值在{{1}中保存为NSString }}。这可能吗?

1 个答案:

答案 0 :(得分:1)

您的对象不是NSString类,因此不会像字符串一样进行转义。

您必须显式使用description方法,或者使用自己格式化的字符串提供谓词。

DSIdentifier* dataSource = [DSIdentifier new];
dataSource.identifier = @"identifier";
// the first method
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"property = %@", dataSource.description];
// the second method
NSPredicate* otherPredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"property = \"%@\"", dataSource]];

NSLog(@"predicate: %@, other predicate: %@", predicate, otherPredicate);
// predicate: property == "identifier", other predicate: property == "identifier"