通常在尝试创建NSPredicate
时,您会使用NSString
,NSNumber
或NSDate
。我试图从未指定的类中创建NSPredicate
。
这就是我创建谓词的方式:
[NSPredicate predicateWithFormat:@"property == %@", value];
如果值为NSString
,这样可以正常工作,但如果我创建MyIdObject
并将值设置为MyIdObject
,我会得到稍微不同的谓词
这是我得到的谓词的结果:
使用NSString
:property ==" 123"
使用MyIdObject
:property == 123
由于标识符在NSString
中保存为CoreData
,因此足以使谓词失败。
我知道123是从描述方法返回的。
只需添加所需的"在谓词格式中不是一个解决方案,因为那时我将获得属性=="%@"
由于某些原因,NSString
从MyIdObject
返回时,其处理方式与NSString
不同。对此有什么解决方案吗?
尝试简化问题:我想使用任意NSObject
作为值而不是NSString
创建谓词,尽管该值在{{1}中保存为NSString
}}。这可能吗?
答案 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"