带有自定义 NSObject 的 NSPredicate

NSPredicate with Custom NSObject

通常在尝试创建 NSPredicate 时,您会使用 NSStringNSNumberNSDate。我正在尝试从未指定的 class.

创建 NSPredicate

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

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

如果值是 NSString,这工作正常,但如果我创建一个 MyIdObject 并将值设置为 MyIdObject,我得到略有不同的谓词

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

NSString: 属性 == "123"

MyIdObject: 属性 == 123

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

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

简单地在谓词格式中添加所需的 " 不是解决方案,因为那样我只会得到 属性 == "%@"

出于某种原因,当 NSStringMyIdObject 返回时,它的处理方式与 NSString 不同。有解决办法吗?

试图简化问题:我想创建一个使用任何 NSObject 作为值而不是 NSString 的谓词,尽管该值在 [ 中保存为 NSString =22=]。这可能吗?

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

您必须显式使用 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"