带有自定义 NSObject 的 NSPredicate
NSPredicate with Custom NSObject
通常在尝试创建 NSPredicate
时,您会使用 NSString
、NSNumber
或 NSDate
。我正在尝试从未指定的 class.
创建 NSPredicate
这就是我创建谓词的方式:
[NSPredicate predicateWithFormat:@"property == %@", value];
如果值是 NSString
,这工作正常,但如果我创建一个 MyIdObject
并将值设置为 MyIdObject
,我得到略有不同的谓词
这些是我得到的谓词的 po 结果:
与 NSString
: 属性 == "123"
与 MyIdObject
: 属性 == 123
由于标识符在 CoreData
中保存为 NSString
,这足以使谓词失败。
我知道 123 是从描述方法返回的。
简单地在谓词格式中添加所需的 " 不是解决方案,因为那样我只会得到 属性 == "%@"
出于某种原因,当 NSString
从 MyIdObject
返回时,它的处理方式与 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"
通常在尝试创建 NSPredicate
时,您会使用 NSString
、NSNumber
或 NSDate
。我正在尝试从未指定的 class.
NSPredicate
这就是我创建谓词的方式:
[NSPredicate predicateWithFormat:@"property == %@", value];
如果值是 NSString
,这工作正常,但如果我创建一个 MyIdObject
并将值设置为 MyIdObject
,我得到略有不同的谓词
这些是我得到的谓词的 po 结果:
与 NSString
: 属性 == "123"
与 MyIdObject
: 属性 == 123
由于标识符在 CoreData
中保存为 NSString
,这足以使谓词失败。
我知道 123 是从描述方法返回的。
简单地在谓词格式中添加所需的 " 不是解决方案,因为那样我只会得到 属性 == "%@"
出于某种原因,当 NSString
从 MyIdObject
返回时,它的处理方式与 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"