我正在尝试为我的核心数据实体生成谓词编辑器模板。在我的代码中,我有以下内容:
NSEntityDescription *descrip = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext];
NSArray *templates = [NSPredicateEditorRowTemplate templatesWithAttributeKeyPaths:[NSArray arrayWithObjects:@"name", @"age", nil] inEntityDescription:descrip];
[ibPredicateEditor setRowTemplates: templates];
NSPredicate *p = [NSPredicate predicateWithFormat:@"name like 'John'"];
[ibPredicateEditor setObjectValue:p];
打印出模板数组的内容给了我以下信息:
CFArray 0x1002d7400 [0x7fff70ff5f20] {type = immutable, count = 2, values = ( 0 : NSPredicateEditorRowTemplate 0x10025c090: [name] [99, 4, 5, 8, 9] NSStringAttributeType 1: NSPredicateEditorRowTemplate 0x1002,52dc0: [年龄] [4, 0, 2, 1, 3] NSInteger16AttributeType )}
当此代码执行时,我在控制台上得到以下信息:
Warning - unable to find template matching predicate name LIKE "John"
执行此操作的界面看起来非常简单,所以我似乎无法弄清楚我做错了什么。任何帮助将不胜感激!
编辑
我最初的问题是当我的模板不支持它时,我正在使用 LIKE 运算符。但是,我很困惑为什么在将复合谓词传递到编辑器时会收到类似的警告。
NSPredicate *p = [NSPredicate predicateWithFormat:@"name CONTAINS 'John'"];
NSPredicate *p2 = [NSPredicate predicateWithFormat:@"name CONTAINS 'Jo'"];
NSPredicate *final = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:p, p2, nil]];
[ibPredicateEditor setObjectValue: final];
或者
NSPredicate *final = [NSCompoundPredicate orPredicateWithSubpredicates:[NSArray arrayWithObjects:p, p2, nil]];
[ibPredicateEditor setObjectValue: final];
这两个都会产生与我最初的问题类似的警告。但是,我觉得奇怪的是,我可以使用单个谓词并构建复合和谓词,但我不能将预构建的复合和谓词传递到编辑器中。